From e838398cb3ab8ad119644b59028441c985844e29 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 4 Dec 2023 15:55:47 +0000 Subject: [PATCH] Generate GitHub Pages content --- coverage-badge.json | 7 + index.html | 15 + .../com.yubico.fido.metadata/AAGUID.java.html | 2048 + .../com.yubico.fido.metadata/AAID.java.html | 1168 + .../AlternativeDescriptions.java.html | 833 + .../AuthenticatorGetInfo.java.html | 6042 ++ .../BiometricAccuracyDescriptor.java.html | 1234 + .../BiometricStatusReport.java.html | 1414 + .../CertFromBase64Converter.java.html | 550 + .../CertToBase64Converter.java.html | 520 + .../CodeAccuracyDescriptor.java.html | 898 + .../FidoMetadataDownloader.java.html | 19576 ++++++ .../FidoMetadataDownloaderException.java.html | 670 + .../FidoMetadataService.java.html | 10729 ++++ .../JacksonCodecs.java.html | 241 + .../MetadataBLOBHeader.java.html | 1490 + .../MetadataBLOBPayloadEntry.java.html | 2738 + .../MetadataStatement.java.html | 6487 ++ .../PatternAccuracyDescriptor.java.html | 958 + .../StatusReport.java.html | 2992 + .../UnexpectedLegalHeader.java.html | 645 + .../com.yubico.fido.metadata/index.html | 188 + .../webauthn-server-attestation/index.html | 69 + .../webauthn-server-attestation/mutations.xml | 326 + .../webauthn-server-attestation/style.css | 563 + .../AttestationTrustSource.java.html | 4661 ++ .../index.html | 62 + .../AssertionExtensionInputs.java.html | 4076 ++ .../AttestationConveyancePreference.java.html | 1716 + .../AttestationObject.java.html | 2707 + .../AttestedCredentialData.java.html | 1192 + ...ticatorAssertionExtensionOutputs.java.html | 2290 + .../AuthenticatorAssertionResponse.java.html | 2881 + .../AuthenticatorAttachment.java.html | 1524 + ...AuthenticatorAttestationResponse.java.html | 2575 + .../AuthenticatorData.java.html | 4336 ++ .../AuthenticatorDataFlags.java.html | 1910 + ...atorRegistrationExtensionOutputs.java.html | 2290 + .../AuthenticatorResponse.java.html | 1020 + .../AuthenticatorSelectionCriteria.java.html | 3562 ++ .../AuthenticatorTransport.java.html | 2612 + .../ByteArray.java.html | 2618 + .../COSEAlgorithmIdentifier.java.html | 1801 + .../ClientAssertionExtensionOutputs.java.html | 2497 + ...ientRegistrationExtensionOutputs.java.html | 2083 + .../CollectedClientData.java.html | 2411 + .../Extensions.java.html | 8487 +++ .../PublicKeyCredential.java.html | 4711 ++ ...blicKeyCredentialCreationOptions.java.html | 7186 +++ .../PublicKeyCredentialDescriptor.java.html | 2854 + .../PublicKeyCredentialParameters.java.html | 2152 + ...ublicKeyCredentialRequestOptions.java.html | 4117 ++ .../PublicKeyCredentialType.java.html | 1296 + .../RegistrationExtensionInputs.java.html | 4800 ++ .../RelyingPartyIdentity.java.html | 1823 + .../ResidentKeyRequirement.java.html | 2106 + .../TokenBindingInfo.java.html | 1444 + .../TokenBindingStatus.java.html | 1386 + .../UserIdentity.java.html | 2488 + .../UserVerificationRequirement.java.html | 1521 + .../com.yubico.webauthn.data/index.html | 286 + .../AppId.java.html | 1964 + .../index.html | 62 + .../KeyProtectionType.java.html | 2193 + .../MatcherProtectionType.java.html | 1638 + .../UserVerificationMethod.java.html | 3513 + .../index.html | 76 + .../DocumentStatus.java.html | 914 + .../Specification.java.html | 915 + .../VersionInfo.java.html | 1488 + .../com.yubico.webauthn.meta/index.html | 76 + ...ynetAttestationStatementVerifier.java.html | 3265 + ...ppleAttestationStatementVerifier.java.html | 2024 + .../AssertionRequest.java.html | 4813 ++ .../AssertionResult.java.html | 4469 ++ .../AssertionResultV2.java.html | 3863 ++ .../CredentialRecord.java.html | 3448 + ...redentialRepositoryV1ToV2Adapter.java.html | 755 + .../com.yubico.webauthn/Crypto.java.html | 1912 + ...oU2fAttestationStatementVerifier.java.html | 3258 + .../FinishAssertionOptions.java.html | 2665 + .../FinishAssertionSteps.java.html | 11186 ++++ .../FinishRegistrationOptions.java.html | 2170 + .../FinishRegistrationSteps.java.html | 11381 ++++ ...NoneAttestationStatementVerifier.java.html | 718 + .../OriginMatcher.java.html | 1324 + ...ckedAttestationStatementVerifier.java.html | 5070 ++ .../RegisteredCredential.java.html | 6709 ++ .../RegistrationResult.java.html | 6470 ++ .../RelyingParty.java.html | 12187 ++++ .../RelyingPartyV2.java.html | 11033 ++++ .../StartAssertionOptions.java.html | 5901 ++ .../StartRegistrationOptions.java.html | 2598 + .../TokenBindingValidator.java.html | 1436 + .../TpmAttestationStatementVerifier.java.html | 11296 ++++ .../U2fRawRegisterResponse.java.html | 1364 + .../WebAuthnCodecs.java.html | 3590 ++ .../X5cAttestationStatementVerifier.java.html | 1251 + .../com.yubico.webauthn/index.html | 244 + .../webauthn-server-core/index.html | 109 + .../webauthn-server-core/mutations.xml | 1213 + .../webauthn-server-core/style.css | 563 + .../BinaryUtil.java.html | 3000 + .../ByteInputStream.java.html | 1047 + .../CertificateParser.java.html | 2773 + .../CollectionUtil.java.html | 1053 + .../ComparableUtil.java.html | 999 + .../ExceptionUtil.java.html | 748 + .../JacksonCodecs.java.html | 726 + .../OptionalUtil.java.html | 1180 + .../StreamUtil.java.html | 759 + .../com.yubico.internal.util/index.html | 118 + .../yubico-util/index.html | 69 + .../yubico-util/mutations.xml | 126 + .../yubico-util/style.css | 563 + prev-commit.txt | 1 + prev-mutations.xml | 52995 ++++++++++++++++ 117 files changed, 367163 insertions(+) create mode 100644 coverage-badge.json create mode 100644 index.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AAGUID.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AAID.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AlternativeDescriptions.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AuthenticatorGetInfo.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/BiometricAccuracyDescriptor.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/BiometricStatusReport.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CertFromBase64Converter.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CertToBase64Converter.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CodeAccuracyDescriptor.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataDownloader.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataDownloaderException.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataService.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/JacksonCodecs.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataBLOBHeader.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataBLOBPayloadEntry.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataStatement.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/PatternAccuracyDescriptor.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/StatusReport.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/UnexpectedLegalHeader.java.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/index.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/index.html create mode 100644 mutation-coverage-reports/webauthn-server-attestation/mutations.xml create mode 100644 mutation-coverage-reports/webauthn-server-attestation/style.css create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.attestation/AttestationTrustSource.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.attestation/index.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AssertionExtensionInputs.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestationConveyancePreference.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestationObject.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestedCredentialData.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAssertionExtensionOutputs.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAssertionResponse.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAttachment.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAttestationResponse.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorData.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorDataFlags.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorRegistrationExtensionOutputs.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorResponse.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorSelectionCriteria.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorTransport.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ByteArray.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/COSEAlgorithmIdentifier.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ClientAssertionExtensionOutputs.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ClientRegistrationExtensionOutputs.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/CollectedClientData.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/Extensions.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredential.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialCreationOptions.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialDescriptor.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialParameters.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialRequestOptions.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialType.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/RegistrationExtensionInputs.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/RelyingPartyIdentity.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ResidentKeyRequirement.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/TokenBindingInfo.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/TokenBindingStatus.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/UserIdentity.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/UserVerificationRequirement.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/index.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.appid/AppId.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.appid/index.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/KeyProtectionType.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/MatcherProtectionType.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/UserVerificationMethod.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/index.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/DocumentStatus.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/Specification.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/VersionInfo.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/index.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AndroidSafetynetAttestationStatementVerifier.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AppleAttestationStatementVerifier.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionRequest.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionResult.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionResultV2.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/CredentialRecord.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/CredentialRepositoryV1ToV2Adapter.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/Crypto.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FidoU2fAttestationStatementVerifier.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishAssertionOptions.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishAssertionSteps.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishRegistrationOptions.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishRegistrationSteps.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/NoneAttestationStatementVerifier.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/OriginMatcher.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/PackedAttestationStatementVerifier.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RegisteredCredential.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RegistrationResult.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RelyingParty.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RelyingPartyV2.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/StartAssertionOptions.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/StartRegistrationOptions.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/TokenBindingValidator.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/TpmAttestationStatementVerifier.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/U2fRawRegisterResponse.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/WebAuthnCodecs.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/X5cAttestationStatementVerifier.java.html create mode 100644 mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/index.html create mode 100644 mutation-coverage-reports/webauthn-server-core/index.html create mode 100644 mutation-coverage-reports/webauthn-server-core/mutations.xml create mode 100644 mutation-coverage-reports/webauthn-server-core/style.css create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/BinaryUtil.java.html create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/ByteInputStream.java.html create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/CertificateParser.java.html create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/CollectionUtil.java.html create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/ComparableUtil.java.html create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/ExceptionUtil.java.html create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/JacksonCodecs.java.html create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/OptionalUtil.java.html create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/StreamUtil.java.html create mode 100644 mutation-coverage-reports/yubico-util/com.yubico.internal.util/index.html create mode 100644 mutation-coverage-reports/yubico-util/index.html create mode 100644 mutation-coverage-reports/yubico-util/mutations.xml create mode 100644 mutation-coverage-reports/yubico-util/style.css create mode 100644 prev-commit.txt create mode 100644 prev-mutations.xml diff --git a/coverage-badge.json b/coverage-badge.json new file mode 100644 index 000000000..b5fc2b240 --- /dev/null +++ b/coverage-badge.json @@ -0,0 +1,7 @@ +{ + "schemaVersion": 1, + "label": "mutation coverage", + "message": "82 %", + "color": "hsl(98, 100%, 40%)", + "cacheSeconds": 3600 +} diff --git a/index.html b/index.html new file mode 100644 index 000000000..65feb6052 --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + Mutation test report index - java-webauthn-server 9d08a9d6 + + +

Mutation test reports for java-webauthn-server 9d08a9d6:

+ + + diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AAGUID.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AAGUID.java.html new file mode 100644 index 000000000..73baf2bbb --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AAGUID.java.html @@ -0,0 +1,2048 @@ + + + + + + + + + +

AAGUID.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +4 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +5 + + + + + + +
import com.yubico.internal.util.ExceptionUtil;
+ +6 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +7 + + + + + + +
import com.yubico.webauthn.data.exception.HexException;
+ +8 + + + + + + +
import java.util.regex.Matcher;
+ +9 + + + + + + +
import java.util.regex.Pattern;
+ +10 + + + + + + +
import lombok.AccessLevel;
+ +11 + + + + + + +
import lombok.Getter;
+ +12 + + + + + + +
import lombok.ToString;
+ +13 + + + + + + +
import lombok.Value;
+ +14 + + + + + + +
+ +15 + + + + + + +
/**
+ +16 + + + + + + +
 * Some authenticators have an AAGUID, which is a 128-bit identifier that indicates the type (e.g.
+ +17 + + + + + + +
 * make and model) of the authenticator. The AAGUID MUST be chosen by the manufacturer to be
+ +18 + + + + + + +
 * identical across all substantially identical authenticators made by that manufacturer, and
+ +19 + + + + + + +
 * different (with probability 1-2-128 or greater) from the AAGUIDs of all other types of
+ +20 + + + + + + +
 * authenticators.
+ +21 + + + + + + +
 *
+ +22 + + + + + + +
 * <p>The AAGUID is represented as a string (e.g. "7a98c250-6808-11cf-b73b-00aa00b677a7") consisting
+ +23 + + + + + + +
 * of 5 hex strings separated by a dash ("-"), see [RFC4122].
+ +24 + + + + + + +
 *
+ +25 + + + + + + +
 * @see <a
+ +26 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#typedefdef-aaguid">FIDO
+ +27 + + + + + + +
 *     Metadata Statement §3.1. Authenticator Attestation GUID (AAGUID) typedef</a>
+ +28 + + + + + + +
 * @see <a href="https://tools.ietf.org/html/rfc4122">RFC 4122: A Universally Unique IDentifier
+ +29 + + + + + + +
 *     (UUID) URN Namespace</a>
+ +30 + + + + + + +
 */
+ +31 + + + + + + +
@Value
+ +32 + + + + + + +
@Getter(AccessLevel.NONE)
+ +33 + + + + + + +
@ToString(includeFieldNames = false, onlyExplicitlyIncluded = true)
+ +34 + + + + + + +
public class AAGUID {
+ +35 + + + + + + +
+ +36 + + + + + + +
  private static final Pattern AAGUID_PATTERN =
+ +37 + + + + + + +
      Pattern.compile(
+ +38 + + + + + + +
          "^([0-9a-fA-F]{8})-?([0-9a-fA-F]{4})-?([0-9a-fA-F]{4})-?([0-9a-fA-F]{4})-?([0-9a-fA-F]{12})$");
+ +39 + + + + + + +
+ +40 + + + + + + +
  private static final ByteArray ZERO =
+ +41 + + + + + + +
      new ByteArray(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0});
+ +42 + + + + + + +
+ +43 + + + + + + +
  ByteArray value;
+ +44 + + + + + + +
+ +45 + + + + + + +
  /**
+ +46 + + + + + + +
   * Construct an AAGUID from its raw binary representation.
+ +47 + + + + + + +
   *
+ +48 + + + + + + +
   * <p>This is the inverse of {@link #asBytes()}.
+ +49 + + + + + + +
   *
+ +50 + + + + + + +
   * @param value a {@link ByteArray} of length exactly 16.
+ +51 + + + + + + +
   */
+ +52 + + + + + + +
  public AAGUID(ByteArray value) {
+ +53 + + +1 + +1. <init> : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +54 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        value.size() == 16,
+ +55 + + + + + + +
        "AAGUID as bytes must be exactly 16 bytes long, was %d: %s",
+ +56 + + + + + + +
        value.size(),
+ +57 + + + + + + +
        value);
+ +58 + + + + + + +
    this.value = value;
+ +59 + + + + + + +
  }
+ +60 + + + + + + +
+ +61 + + + + + + +
  /**
+ +62 + + + + + + +
   * The 16-byte binary representation of this AAGUID, for example <code>
+ +63 + + + + + + +
   * 7a98c250680811cfb73b00aa00b677a7</code> when hex-encoded.
+ +64 + + + + + + +
   *
+ +65 + + + + + + +
   * <p>This is the inverse of {@link #AAGUID(ByteArray)}.
+ +66 + + + + + + +
   */
+ +67 + + + + + + +
  public ByteArray asBytes() {
+ +68 + + +1 + +1. asBytes : replaced return value with null for com/yubico/fido/metadata/AAGUID::asBytes → KILLED
+ +
+
+
    return value;
+ +69 + + + + + + +
  }
+ +70 + + + + + + +
+ +71 + + + + + + +
  /**
+ +72 + + + + + + +
   * The 32-character hexadecimal representation of this AAGUID, for example <code>
+ +73 + + + + + + +
   * "7a98c250680811cfb73b00aa00b677a7"</code>.
+ +74 + + + + + + +
   */
+ +75 + + + + + + +
  public String asHexString() {
+ +76 + + +1 + +1. asHexString : replaced return value with "" for com/yubico/fido/metadata/AAGUID::asHexString → KILLED
+ +
+
+
    return value.getHex();
+ +77 + + + + + + +
  }
+ +78 + + + + + + +
+ +79 + + + + + + +
  /**
+ +80 + + + + + + +
   * The 36-character string representation of this AAGUID, for example <code>
+ +81 + + + + + + +
   * "7a98c250-6808-11cf-b73b-00aa00b677a7"</code>.
+ +82 + + + + + + +
   */
+ +83 + + + + + + +
  @JsonValue
+ +84 + + + + + + +
  @ToString.Include
+ +85 + + + + + + +
  public String asGuidString() {
+ +86 + + + + + + +
    final String hex = value.getHex();
+ +87 + + +1 + +1. asGuidString : replaced return value with "" for com/yubico/fido/metadata/AAGUID::asGuidString → KILLED
+ +
+
+
    return String.format(
+ +88 + + + + + + +
        "%s-%s-%s-%s-%s",
+ +89 + + + + + + +
        hex.substring(0, 8),
+ +90 + + + + + + +
        hex.substring(8, 8 + 4),
+ +91 + + + + + + +
        hex.substring(8 + 4, 8 + 4 + 4),
+ +92 + + + + + + +
        hex.substring(8 + 4 + 4, 8 + 4 + 4 + 4),
+ +93 + + + + + + +
        hex.substring(8 + 4 + 4 + 4, 8 + 4 + 4 + 4 + 12));
+ +94 + + + + + + +
  }
+ +95 + + + + + + +
+ +96 + + + + + + +
  /**
+ +97 + + + + + + +
   * <code>true</code> if and only if this {@link AAGUID} consists of all zeroes. This typically
+ +98 + + + + + + +
   * indicates that an authenticator has no AAGUID, or that the AAGUID has been redacted.
+ +99 + + + + + + +
   */
+ +100 + + + + + + +
  public boolean isZero() {
+ +101 + + +2 + +1. isZero : replaced boolean return with true for com/yubico/fido/metadata/AAGUID::isZero → KILLED
+2. isZero : replaced boolean return with false for com/yubico/fido/metadata/AAGUID::isZero → KILLED
+ +
+
+
    return ZERO.equals(value);
+ +102 + + + + + + +
  }
+ +103 + + + + + + +
+ +104 + + + + + + +
  private static ByteArray parse(String value) {
+ +105 + + + + + + +
    Matcher matcher = AAGUID_PATTERN.matcher(value);
+ +106 + + +1 + +1. parse : negated conditional → KILLED
+ +
+
+
    if (matcher.find()) {
+ +107 + + + + + + +
      try {
+ +108 + + +1 + +1. parse : replaced return value with null for com/yubico/fido/metadata/AAGUID::parse → KILLED
+ +
+
+
        return ByteArray.fromHex(matcher.group(1))
+ +109 + + + + + + +
            .concat(ByteArray.fromHex(matcher.group(2)))
+ +110 + + + + + + +
            .concat(ByteArray.fromHex(matcher.group(3)))
+ +111 + + + + + + +
            .concat(ByteArray.fromHex(matcher.group(4)))
+ +112 + + + + + + +
            .concat(ByteArray.fromHex(matcher.group(5)));
+ +113 + + + + + + +
      } catch (HexException e) {
+ +114 + + + + + + +
        throw new RuntimeException(
+ +115 + + + + + + +
            "This exception should be impossible, please file a bug report.", e);
+ +116 + + + + + + +
      }
+ +117 + + + + + + +
    } else {
+ +118 + + + + + + +
      throw new IllegalArgumentException("Value does not match AAGUID pattern: " + value);
+ +119 + + + + + + +
    }
+ +120 + + + + + + +
  }
+ +121 + + + + + + +
+ +122 + + + + + + +
  @JsonCreator
+ +123 + + + + + + +
  private static AAGUID fromString(String aaguid) {
+ +124 + + +1 + +1. fromString : replaced return value with null for com/yubico/fido/metadata/AAGUID::fromString → KILLED
+ +
+
+
    return new AAGUID(parse(aaguid));
+ +125 + + + + + + +
  }
+ +126 + + + + + + +
}

Mutations

53 + + + +

1.1
Location : <init>
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
54 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
68 + + + +

1.1
Location : asBytes
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/AAGUID::asBytes → KILLED

+
76 + + + +

1.1
Location : asHexString
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with "" for com/yubico/fido/metadata/AAGUID::asHexString → KILLED

+
87 + + + +

1.1
Location : asGuidString
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with "" for com/yubico/fido/metadata/AAGUID::asGuidString → KILLED

+
101 + + + +

1.1
Location : isZero
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/AAGUID::isZero → KILLED

2.2
Location : isZero
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/AAGUID::isZero → KILLED

+
106 + + + +

1.1
Location : parse
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
108 + + + +

1.1
Location : parse
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/AAGUID::parse → KILLED

+
124 + + + +

1.1
Location : fromString
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/AAGUID::fromString → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AAID.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AAID.java.html new file mode 100644 index 000000000..5943ab0a8 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AAID.java.html @@ -0,0 +1,1168 @@ + + + + + + + + + +

AAID.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +4 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +5 + + + + + + +
import java.util.regex.Pattern;
+ +6 + + + + + + +
import lombok.Value;
+ +7 + + + + + + +
+ +8 + + + + + + +
/**
+ +9 + + + + + + +
 * Each UAF authenticator MUST have an AAID to identify UAF enabled authenticator models globally.
+ +10 + + + + + + +
 * The AAID MUST uniquely identify a specific authenticator model within the range of all
+ +11 + + + + + + +
 * UAF-enabled authenticator models made by all authenticator vendors, where authenticators of a
+ +12 + + + + + + +
 * specific model must share identical security characteristics within the model (see Security
+ +13 + + + + + + +
 * Considerations).
+ +14 + + + + + + +
 *
+ +15 + + + + + + +
 * <p>The AAID is a string with format <code>"V#M"</code>, where
+ +16 + + + + + + +
 *
+ +17 + + + + + + +
 * <ul>
+ +18 + + + + + + +
 *   <li><code>#</code> is a separator
+ +19 + + + + + + +
 *   <li><code>V</code> indicates the authenticator Vendor Code. This code consists of 4 hexadecimal
+ +20 + + + + + + +
 *       digits.
+ +21 + + + + + + +
 *   <li><code>M</code> indicates the authenticator Model Code. This code consists of 4 hexadecimal
+ +22 + + + + + + +
 *       digits.
+ +23 + + + + + + +
 * </ul>
+ +24 + + + + + + +
 *
+ +25 + + + + + + +
 * @see <a
+ +26 + + + + + + +
 *     href="https://fidoalliance.org/specs/fido-uaf-v1.2-ps-20201020/fido-uaf-protocol-v1.2-ps-20201020.html#authenticator-attestation-id-aaid-typedef">FIDO
+ +27 + + + + + + +
 *     UAF Protocol Specification §3.1.4 Authenticator Attestation ID (AAID) typedef</a>
+ +28 + + + + + + +
 */
+ +29 + + + + + + +
@Value
+ +30 + + + + + + +
public class AAID {
+ +31 + + + + + + +
+ +32 + + + + + + +
  private static final Pattern AAID_PATTERN = Pattern.compile("^[0-9a-fA-F]{4}#[0-9a-fA-F]{4}$");
+ +33 + + + + + + +
+ +34 + + + + + + +
  /**
+ +35 + + + + + + +
   * The underlying string value of this AAID.
+ +36 + + + + + + +
   *
+ +37 + + + + + + +
   * <p>The AAID is a string with format <code>"V#M"</code>, where
+ +38 + + + + + + +
   *
+ +39 + + + + + + +
   * <ul>
+ +40 + + + + + + +
   *   <li><code>#</code> is a separator
+ +41 + + + + + + +
   *   <li><code>V</code> indicates the authenticator Vendor Code. This code consists of 4
+ +42 + + + + + + +
   *       hexadecimal digits.
+ +43 + + + + + + +
   *   <li><code>M</code> indicates the authenticator Model Code. This code consists of 4
+ +44 + + + + + + +
   *       hexadecimal digits.
+ +45 + + + + + + +
   * </ul>
+ +46 + + + + + + +
   *
+ +47 + + + + + + +
   * @see <a
+ +48 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-uaf-v1.2-ps-20201020/fido-uaf-protocol-v1.2-ps-20201020.html#authenticator-attestation-id-aaid-typedef">Authenticator
+ +49 + + + + + + +
   *     Attestation ID (AAID) typedef</a>
+ +50 + + + + + + +
   */
+ +51 + + + + + + +
  @JsonValue String value;
+ +52 + + + + + + +
+ +53 + + + + + + +
  /**
+ +54 + + + + + + +
   * Construct an {@link AAID} from its String representation.
+ +55 + + + + + + +
   *
+ +56 + + + + + + +
   * <p>This is the inverse of {@link #getValue()}.
+ +57 + + + + + + +
   *
+ +58 + + + + + + +
   * @param value a {@link String} conforming to the rules specified in the {@link AAID} type.
+ +59 + + + + + + +
   */
+ +60 + + + + + + +
  @JsonCreator
+ +61 + + + + + + +
  public AAID(String value) {
+ +62 + + + + + + +
    this.value = validate(value);
+ +63 + + + + + + +
  }
+ +64 + + + + + + +
+ +65 + + + + + + +
  private String validate(String value) {
+ +66 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
    if (AAID_PATTERN.matcher(value).matches()) {
+ +67 + + +1 + +1. validate : replaced return value with "" for com/yubico/fido/metadata/AAID::validate → KILLED
+ +
+
+
      return value;
+ +68 + + + + + + +
    } else {
+ +69 + + + + + + +
      throw new IllegalArgumentException(
+ +70 + + + + + + +
          String.format("Value does not satisfy AAID format: %s", value));
+ +71 + + + + + + +
    }
+ +72 + + + + + + +
  }
+ +73 + + + + + + +
}

Mutations

66 + + + +

1.1
Location : validate
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
67 + + + +

1.1
Location : validate
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with "" for com/yubico/fido/metadata/AAID::validate → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AlternativeDescriptions.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AlternativeDescriptions.java.html new file mode 100644 index 000000000..9c36200f5 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AlternativeDescriptions.java.html @@ -0,0 +1,833 @@ + + + + + + + + + +

AlternativeDescriptions.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +4 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +5 + + + + + + +
import java.util.Map;
+ +6 + + + + + + +
import java.util.Optional;
+ +7 + + + + + + +
import lombok.AccessLevel;
+ +8 + + + + + + +
import lombok.AllArgsConstructor;
+ +9 + + + + + + +
import lombok.Getter;
+ +10 + + + + + + +
import lombok.Value;
+ +11 + + + + + + +
+ +12 + + + + + + +
/**
+ +13 + + + + + + +
 * See:
+ +14 + + + + + + +
 * https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#alternativedescriptions-dictionary
+ +15 + + + + + + +
 *
+ +16 + + + + + + +
 * @see <a
+ +17 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#alternativedescriptions-dictionary">FIDO
+ +18 + + + + + + +
 *     Metadata Statement §3.11. AlternativeDescriptions dictionary</a>
+ +19 + + + + + + +
 */
+ +20 + + + + + + +
@Value
+ +21 + + + + + + +
@AllArgsConstructor(onConstructor_ = {@JsonCreator})
+ +22 + + + + + + +
public class AlternativeDescriptions {
+ +23 + + + + + + +
+ +24 + + + + + + +
  @JsonValue
+ +25 + + + + + + +
  @Getter(AccessLevel.NONE)
+ +26 + + + + + + +
  Map<String, String> values;
+ +27 + + + + + + +
+ +28 + + + + + + +
  /**
+ +29 + + + + + + +
   * Get a map entry in accordance with the rules defined in <a
+ +30 + + + + + + +
   * href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#alternativedescriptions-dictionary">AlternativeDescriptions
+ +31 + + + + + + +
   * dictionary</a>.
+ +32 + + + + + + +
   *
+ +33 + + + + + + +
   * @see <a
+ +34 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#alternativedescriptions-dictionary">AlternativeDescriptions
+ +35 + + + + + + +
   *     dictionary</a>.
+ +36 + + + + + + +
   */
+ +37 + + + + + + +
  public Optional<String> get(String languageCode) {
+ +38 + + +1 + +1. get : negated conditional → NO_COVERAGE
+ +
+
+
    if (values.containsKey(languageCode)) {
+ +39 + + +1 + +1. get : replaced return value with Optional.empty for com/yubico/fido/metadata/AlternativeDescriptions::get → NO_COVERAGE
+ +
+
+
      return Optional.of(values.get(languageCode));
+ +40 + + + + + + +
    } else {
+ +41 + + + + + + +
      final String[] splits = languageCode.split("-");
+ +42 + + +3 + +1. get : changed conditional boundary → NO_COVERAGE
+2. get : negated conditional → NO_COVERAGE
+3. get : negated conditional → NO_COVERAGE
+ +
+
+
      if (splits.length > 1 && values.containsKey(splits[0])) {
+ +43 + + +1 + +1. get : replaced return value with Optional.empty for com/yubico/fido/metadata/AlternativeDescriptions::get → NO_COVERAGE
+ +
+
+
        return Optional.of(values.get(splits[0]));
+ +44 + + + + + + +
      } else {
+ +45 + + + + + + +
        return Optional.empty();
+ +46 + + + + + + +
      }
+ +47 + + + + + + +
    }
+ +48 + + + + + + +
  }
+ +49 + + + + + + +
}

Mutations

38 + + + +

1.1
Location : get
Killed by : none
negated conditional → NO_COVERAGE

+
39 + + + +

1.1
Location : get
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AlternativeDescriptions::get → NO_COVERAGE

+
42 + + + +

1.1
Location : get
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : get
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : get
Killed by : none
negated conditional → NO_COVERAGE

+
43 + + + +

1.1
Location : get
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AlternativeDescriptions::get → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AuthenticatorGetInfo.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AuthenticatorGetInfo.java.html new file mode 100644 index 000000000..88ada2aa3 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/AuthenticatorGetInfo.java.html @@ -0,0 +1,6042 @@ + + + + + + + + + +

AuthenticatorGetInfo.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+ +4 + + + + + + +
import com.fasterxml.jackson.core.JsonGenerator;
+ +5 + + + + + + +
import com.fasterxml.jackson.core.JsonParser;
+ +6 + + + + + + +
import com.fasterxml.jackson.databind.DeserializationContext;
+ +7 + + + + + + +
import com.fasterxml.jackson.databind.JsonDeserializer;
+ +8 + + + + + + +
import com.fasterxml.jackson.databind.JsonSerializer;
+ +9 + + + + + + +
import com.fasterxml.jackson.databind.SerializerProvider;
+ +10 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+ +11 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+ +12 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorTransport;
+ +13 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialParameters;
+ +14 + + + + + + +
import com.yubico.webauthn.extension.uvm.UserVerificationMethod;
+ +15 + + + + + + +
import java.io.IOException;
+ +16 + + + + + + +
import java.util.Arrays;
+ +17 + + + + + + +
import java.util.List;
+ +18 + + + + + + +
import java.util.Map;
+ +19 + + + + + + +
import java.util.Optional;
+ +20 + + + + + + +
import java.util.Set;
+ +21 + + + + + + +
import java.util.stream.Collectors;
+ +22 + + + + + + +
import lombok.Builder;
+ +23 + + + + + + +
import lombok.NonNull;
+ +24 + + + + + + +
import lombok.Value;
+ +25 + + + + + + +
import lombok.extern.jackson.Jacksonized;
+ +26 + + + + + + +
+ +27 + + + + + + +
/**
+ +28 + + + + + + +
 * This dictionary describes supported versions, extensions, AAGUID of the device and its
+ +29 + + + + + + +
 * capabilities.
+ +30 + + + + + + +
 *
+ +31 + + + + + + +
 * <p>See: <a
+ +32 + + + + + + +
 * href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +33 + + + + + + +
 * to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +34 + + + + + + +
 *
+ +35 + + + + + + +
 * @see <a
+ +36 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#authenticatorgetinfo-dictionary">FIDO
+ +37 + + + + + + +
 *     Metadata Statement §3.12. AuthenticatorGetInfo dictionary</a>
+ +38 + + + + + + +
 * @see <a
+ +39 + + + + + + +
 *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +40 + + + + + + +
 *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +41 + + + + + + +
 */
+ +42 + + + + + + +
@Value
+ +43 + + + + + + +
@Builder(toBuilder = true)
+ +44 + + + + + + +
@Jacksonized
+ +45 + + + + + + +
@JsonIgnoreProperties({
+ +46 + + + + + + +
  "maxAuthenticatorConfigLength",
+ +47 + + + + + + +
  "defaultCredProtect"
+ +48 + + + + + + +
}) // Present in example but not defined
+ +49 + + + + + + +
public class AuthenticatorGetInfo {
+ +50 + + + + + + +
+ +51 + + + + + + +
  /**
+ +52 + + + + + + +
   * @see <a
+ +53 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +54 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +55 + + + + + + +
   */
+ +56 + + + + + + +
  @NonNull Set<CtapVersion> versions;
+ +57 + + + + + + +
+ +58 + + + + + + +
  /**
+ +59 + + + + + + +
   * @see <a
+ +60 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +61 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +62 + + + + + + +
   */
+ +63 + + + + + + +
  Set<String> extensions;
+ +64 + + + + + + +
+ +65 + + + + + + +
  /**
+ +66 + + + + + + +
   * @see <a
+ +67 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +68 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +69 + + + + + + +
   */
+ +70 + + + + + + +
  AAGUID aaguid;
+ +71 + + + + + + +
+ +72 + + + + + + +
  /**
+ +73 + + + + + + +
   * @see <a
+ +74 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +75 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +76 + + + + + + +
   */
+ +77 + + + + + + +
  SupportedCtapOptions options;
+ +78 + + + + + + +
+ +79 + + + + + + +
  /**
+ +80 + + + + + + +
   * @see <a
+ +81 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +82 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +83 + + + + + + +
   */
+ +84 + + + + + + +
  Integer maxMsgSize;
+ +85 + + + + + + +
+ +86 + + + + + + +
  /**
+ +87 + + + + + + +
   * @see <a
+ +88 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +89 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +90 + + + + + + +
   */
+ +91 + + + + + + +
  Set<CtapPinUvAuthProtocolVersion> pinUvAuthProtocols;
+ +92 + + + + + + +
+ +93 + + + + + + +
  /**
+ +94 + + + + + + +
   * @see <a
+ +95 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +96 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +97 + + + + + + +
   */
+ +98 + + + + + + +
  Integer maxCredentialCountInList;
+ +99 + + + + + + +
+ +100 + + + + + + +
  /**
+ +101 + + + + + + +
   * @see <a
+ +102 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +103 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +104 + + + + + + +
   */
+ +105 + + + + + + +
  Integer maxCredentialIdLength;
+ +106 + + + + + + +
+ +107 + + + + + + +
  /**
+ +108 + + + + + + +
   * @see <a
+ +109 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +110 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +111 + + + + + + +
   */
+ +112 + + + + + + +
  Set<AuthenticatorTransport> transports;
+ +113 + + + + + + +
+ +114 + + + + + + +
  /**
+ +115 + + + + + + +
   * @see <a
+ +116 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +117 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +118 + + + + + + +
   */
+ +119 + + + + + + +
  List<PublicKeyCredentialParameters> algorithms;
+ +120 + + + + + + +
+ +121 + + + + + + +
  /**
+ +122 + + + + + + +
   * @see <a
+ +123 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +124 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +125 + + + + + + +
   */
+ +126 + + + + + + +
  Integer maxSerializedLargeBlobArray;
+ +127 + + + + + + +
+ +128 + + + + + + +
  /**
+ +129 + + + + + + +
   * @see <a
+ +130 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +131 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +132 + + + + + + +
   */
+ +133 + + + + + + +
  Boolean forcePINChange;
+ +134 + + + + + + +
+ +135 + + + + + + +
  /**
+ +136 + + + + + + +
   * @see <a
+ +137 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +138 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +139 + + + + + + +
   */
+ +140 + + + + + + +
  Integer minPINLength;
+ +141 + + + + + + +
+ +142 + + + + + + +
  /**
+ +143 + + + + + + +
   * @see <a
+ +144 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +145 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +146 + + + + + + +
   */
+ +147 + + + + + + +
  Integer firmwareVersion;
+ +148 + + + + + + +
+ +149 + + + + + + +
  /**
+ +150 + + + + + + +
   * @see <a
+ +151 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +152 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +153 + + + + + + +
   */
+ +154 + + + + + + +
  Integer maxCredBlobLength;
+ +155 + + + + + + +
+ +156 + + + + + + +
  /**
+ +157 + + + + + + +
   * @see <a
+ +158 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +159 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +160 + + + + + + +
   */
+ +161 + + + + + + +
  Integer maxRPIDsForSetMinPINLength;
+ +162 + + + + + + +
+ +163 + + + + + + +
  /**
+ +164 + + + + + + +
   * @see <a
+ +165 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +166 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +167 + + + + + + +
   */
+ +168 + + + + + + +
  Integer preferredPlatformUvAttempts;
+ +169 + + + + + + +
+ +170 + + + + + + +
  @JsonDeserialize(using = SetFromIntJsonDeserializer.class)
+ +171 + + + + + + +
  @JsonSerialize(contentUsing = IntFromSetJsonSerializer.class)
+ +172 + + + + + + +
  Set<UserVerificationMethod> uvModality;
+ +173 + + + + + + +
+ +174 + + + + + + +
  Map<CtapCertificationId, Integer> certifications;
+ +175 + + + + + + +
  Integer remainingDiscoverableCredentials;
+ +176 + + + + + + +
  Set<Integer> vendorPrototypeConfigCommands;
+ +177 + + + + + + +
+ +178 + + + + + + +
  /**
+ +179 + + + + + + +
   * @see <a
+ +180 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +181 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +182 + + + + + + +
   */
+ +183 + + + + + + +
  public Optional<Set<String>> getExtensions() {
+ +184 + + +1 + +1. getExtensions : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getExtensions → SURVIVED
+ +
+
+
    return Optional.ofNullable(extensions);
+ +185 + + + + + + +
  }
+ +186 + + + + + + +
+ +187 + + + + + + +
  /**
+ +188 + + + + + + +
   * @see <a
+ +189 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +190 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +191 + + + + + + +
   */
+ +192 + + + + + + +
  public Optional<AAGUID> getAaguid() {
+ +193 + + +1 + +1. getAaguid : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getAaguid → SURVIVED
+ +
+
+
    return Optional.ofNullable(aaguid);
+ +194 + + + + + + +
  }
+ +195 + + + + + + +
+ +196 + + + + + + +
  /**
+ +197 + + + + + + +
   * @see <a
+ +198 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +199 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +200 + + + + + + +
   */
+ +201 + + + + + + +
  public Optional<SupportedCtapOptions> getOptions() {
+ +202 + + +1 + +1. getOptions : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getOptions → SURVIVED
+ +
+
+
    return Optional.ofNullable(options);
+ +203 + + + + + + +
  }
+ +204 + + + + + + +
+ +205 + + + + + + +
  /**
+ +206 + + + + + + +
   * @see <a
+ +207 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +208 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +209 + + + + + + +
   */
+ +210 + + + + + + +
  public Optional<Integer> getMaxMsgSize() {
+ +211 + + +1 + +1. getMaxMsgSize : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxMsgSize → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxMsgSize);
+ +212 + + + + + + +
  }
+ +213 + + + + + + +
+ +214 + + + + + + +
  /**
+ +215 + + + + + + +
   * @see <a
+ +216 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +217 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +218 + + + + + + +
   */
+ +219 + + + + + + +
  public Optional<Set<CtapPinUvAuthProtocolVersion>> getPinUvAuthProtocols() {
+ +220 + + +1 + +1. getPinUvAuthProtocols : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getPinUvAuthProtocols → SURVIVED
+ +
+
+
    return Optional.ofNullable(pinUvAuthProtocols);
+ +221 + + + + + + +
  }
+ +222 + + + + + + +
+ +223 + + + + + + +
  /**
+ +224 + + + + + + +
   * @see <a
+ +225 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +226 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +227 + + + + + + +
   */
+ +228 + + + + + + +
  public Optional<Integer> getMaxCredentialCountInList() {
+ +229 + + +1 + +1. getMaxCredentialCountInList : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredentialCountInList → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxCredentialCountInList);
+ +230 + + + + + + +
  }
+ +231 + + + + + + +
+ +232 + + + + + + +
  /**
+ +233 + + + + + + +
   * @see <a
+ +234 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +235 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +236 + + + + + + +
   */
+ +237 + + + + + + +
  public Optional<Integer> getMaxCredentialIdLength() {
+ +238 + + +1 + +1. getMaxCredentialIdLength : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredentialIdLength → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxCredentialIdLength);
+ +239 + + + + + + +
  }
+ +240 + + + + + + +
+ +241 + + + + + + +
  /**
+ +242 + + + + + + +
   * @see <a
+ +243 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +244 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +245 + + + + + + +
   */
+ +246 + + + + + + +
  public Optional<Set<AuthenticatorTransport>> getTransports() {
+ +247 + + +1 + +1. getTransports : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getTransports → SURVIVED
+ +
+
+
    return Optional.ofNullable(transports);
+ +248 + + + + + + +
  }
+ +249 + + + + + + +
+ +250 + + + + + + +
  /**
+ +251 + + + + + + +
   * @see <a
+ +252 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +253 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +254 + + + + + + +
   */
+ +255 + + + + + + +
  public Optional<List<PublicKeyCredentialParameters>> getAlgorithms() {
+ +256 + + +1 + +1. getAlgorithms : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getAlgorithms → SURVIVED
+ +
+
+
    return Optional.ofNullable(algorithms);
+ +257 + + + + + + +
  }
+ +258 + + + + + + +
+ +259 + + + + + + +
  /**
+ +260 + + + + + + +
   * @see <a
+ +261 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +262 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +263 + + + + + + +
   */
+ +264 + + + + + + +
  public Optional<Integer> getMaxSerializedLargeBlobArray() {
+ +265 + + +1 + +1. getMaxSerializedLargeBlobArray : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxSerializedLargeBlobArray → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxSerializedLargeBlobArray);
+ +266 + + + + + + +
  }
+ +267 + + + + + + +
+ +268 + + + + + + +
  /**
+ +269 + + + + + + +
   * @see <a
+ +270 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +271 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +272 + + + + + + +
   */
+ +273 + + + + + + +
  public Optional<Boolean> getForcePINChange() {
+ +274 + + +1 + +1. getForcePINChange : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getForcePINChange → SURVIVED
+ +
+
+
    return Optional.ofNullable(forcePINChange);
+ +275 + + + + + + +
  }
+ +276 + + + + + + +
+ +277 + + + + + + +
  /**
+ +278 + + + + + + +
   * @see <a
+ +279 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +280 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +281 + + + + + + +
   */
+ +282 + + + + + + +
  public Optional<Integer> getMinPINLength() {
+ +283 + + +1 + +1. getMinPINLength : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMinPINLength → SURVIVED
+ +
+
+
    return Optional.ofNullable(minPINLength);
+ +284 + + + + + + +
  }
+ +285 + + + + + + +
+ +286 + + + + + + +
  /**
+ +287 + + + + + + +
   * @see <a
+ +288 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +289 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +290 + + + + + + +
   */
+ +291 + + + + + + +
  public Optional<Integer> getFirmwareVersion() {
+ +292 + + +1 + +1. getFirmwareVersion : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getFirmwareVersion → SURVIVED
+ +
+
+
    return Optional.ofNullable(firmwareVersion);
+ +293 + + + + + + +
  }
+ +294 + + + + + + +
+ +295 + + + + + + +
  /**
+ +296 + + + + + + +
   * @see <a
+ +297 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +298 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +299 + + + + + + +
   */
+ +300 + + + + + + +
  public Optional<Integer> getMaxCredBlobLength() {
+ +301 + + +1 + +1. getMaxCredBlobLength : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredBlobLength → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxCredBlobLength);
+ +302 + + + + + + +
  }
+ +303 + + + + + + +
+ +304 + + + + + + +
  /**
+ +305 + + + + + + +
   * @see <a
+ +306 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +307 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +308 + + + + + + +
   */
+ +309 + + + + + + +
  public Optional<Integer> getMaxRPIDsForSetMinPINLength() {
+ +310 + + +1 + +1. getMaxRPIDsForSetMinPINLength : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxRPIDsForSetMinPINLength → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxRPIDsForSetMinPINLength);
+ +311 + + + + + + +
  }
+ +312 + + + + + + +
+ +313 + + + + + + +
  /**
+ +314 + + + + + + +
   * @see <a
+ +315 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +316 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +317 + + + + + + +
   */
+ +318 + + + + + + +
  public Optional<Integer> getPreferredPlatformUvAttempts() {
+ +319 + + +1 + +1. getPreferredPlatformUvAttempts : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getPreferredPlatformUvAttempts → SURVIVED
+ +
+
+
    return Optional.ofNullable(preferredPlatformUvAttempts);
+ +320 + + + + + + +
  }
+ +321 + + + + + + +
+ +322 + + + + + + +
  /**
+ +323 + + + + + + +
   * @see <a
+ +324 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +325 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +326 + + + + + + +
   */
+ +327 + + + + + + +
  public Optional<Set<UserVerificationMethod>> getUvModality() {
+ +328 + + +1 + +1. getUvModality : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getUvModality → SURVIVED
+ +
+
+
    return Optional.ofNullable(uvModality);
+ +329 + + + + + + +
  }
+ +330 + + + + + + +
+ +331 + + + + + + +
  /**
+ +332 + + + + + + +
   * @see <a
+ +333 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +334 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +335 + + + + + + +
   */
+ +336 + + + + + + +
  public Optional<Map<CtapCertificationId, Integer>> getCertifications() {
+ +337 + + +1 + +1. getCertifications : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getCertifications → SURVIVED
+ +
+
+
    return Optional.ofNullable(certifications);
+ +338 + + + + + + +
  }
+ +339 + + + + + + +
+ +340 + + + + + + +
  /**
+ +341 + + + + + + +
   * @see <a
+ +342 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +343 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +344 + + + + + + +
   */
+ +345 + + + + + + +
  public Optional<Integer> getRemainingDiscoverableCredentials() {
+ +346 + + +1 + +1. getRemainingDiscoverableCredentials : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getRemainingDiscoverableCredentials → SURVIVED
+ +
+
+
    return Optional.ofNullable(remainingDiscoverableCredentials);
+ +347 + + + + + + +
  }
+ +348 + + + + + + +
+ +349 + + + + + + +
  /**
+ +350 + + + + + + +
   * @see <a
+ +351 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo">Client
+ +352 + + + + + + +
   *     to Authenticator Protocol (CTAP) §6.4. authenticatorGetInfo (0x04)</a>
+ +353 + + + + + + +
   */
+ +354 + + + + + + +
  public Optional<Set<Integer>> getVendorPrototypeConfigCommands() {
+ +355 + + +1 + +1. getVendorPrototypeConfigCommands : replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getVendorPrototypeConfigCommands → SURVIVED
+ +
+
+
    return Optional.ofNullable(vendorPrototypeConfigCommands);
+ +356 + + + + + + +
  }
+ +357 + + + + + + +
+ +358 + + + + + + +
  private static class SetFromIntJsonDeserializer
+ +359 + + + + + + +
      extends JsonDeserializer<Set<UserVerificationMethod>> {
+ +360 + + + + + + +
    @Override
+ +361 + + + + + + +
    public Set<UserVerificationMethod> deserialize(JsonParser p, DeserializationContext ctxt)
+ +362 + + + + + + +
        throws IOException {
+ +363 + + + + + + +
      final int bitset = p.getNumberValue().intValue();
+ +364 + + +1 + +1. deserialize : replaced return value with Collections.emptySet for com/yubico/fido/metadata/AuthenticatorGetInfo$SetFromIntJsonDeserializer::deserialize → KILLED
+ +
+
+
      return Arrays.stream(UserVerificationMethod.values())
+ +365 + + +3 + +1. lambda$deserialize$0 : Replaced bitwise AND with OR → KILLED
+2. lambda$deserialize$0 : negated conditional → KILLED
+3. lambda$deserialize$0 : replaced boolean return with true for com/yubico/fido/metadata/AuthenticatorGetInfo$SetFromIntJsonDeserializer::lambda$deserialize$0 → KILLED
+ +
+
+
          .filter(uvm -> (uvm.getValue() & bitset) != 0)
+ +366 + + + + + + +
          .collect(Collectors.toSet());
+ +367 + + + + + + +
    }
+ +368 + + + + + + +
  }
+ +369 + + + + + + +
+ +370 + + + + + + +
  private static class IntFromSetJsonSerializer
+ +371 + + + + + + +
      extends JsonSerializer<Set<UserVerificationMethod>> {
+ +372 + + + + + + +
    @Override
+ +373 + + + + + + +
    public void serialize(
+ +374 + + + + + + +
        Set<UserVerificationMethod> value, JsonGenerator gen, SerializerProvider serializers)
+ +375 + + + + + + +
        throws IOException {
+ +376 + + +1 + +1. serialize : removed call to com/fasterxml/jackson/core/JsonGenerator::writeNumber → KILLED
+ +
+
+
      gen.writeNumber(
+ +377 + + +4 + +1. lambda$serialize$1 : Replaced bitwise OR with AND → NO_COVERAGE
+2. lambda$serialize$1 : replaced Integer return value with 0 for com/yubico/fido/metadata/AuthenticatorGetInfo$IntFromSetJsonSerializer::lambda$serialize$1 → NO_COVERAGE
+3. lambda$serialize$0 : replaced Integer return value with 0 for com/yubico/fido/metadata/AuthenticatorGetInfo$IntFromSetJsonSerializer::lambda$serialize$0 → KILLED
+4. lambda$serialize$0 : Replaced bitwise OR with AND → KILLED
+ +
+
+
          value.stream().reduce(0, (acc, next) -> acc | next.getValue(), (a, b) -> a | b));
+ +378 + + + + + + +
    }
+ +379 + + + + + + +
  }
+ +380 + + + + + + +
}

Mutations

184 + + + +

1.1
Location : getExtensions
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getExtensions → SURVIVED

+
193 + + + +

1.1
Location : getAaguid
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getAaguid → SURVIVED

+
202 + + + +

1.1
Location : getOptions
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getOptions → SURVIVED

+
211 + + + +

1.1
Location : getMaxMsgSize
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxMsgSize → SURVIVED

+
220 + + + +

1.1
Location : getPinUvAuthProtocols
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getPinUvAuthProtocols → SURVIVED

+
229 + + + +

1.1
Location : getMaxCredentialCountInList
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredentialCountInList → SURVIVED

+
238 + + + +

1.1
Location : getMaxCredentialIdLength
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredentialIdLength → SURVIVED

+
247 + + + +

1.1
Location : getTransports
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getTransports → SURVIVED

+
256 + + + +

1.1
Location : getAlgorithms
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getAlgorithms → SURVIVED

+
265 + + + +

1.1
Location : getMaxSerializedLargeBlobArray
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxSerializedLargeBlobArray → SURVIVED

+
274 + + + +

1.1
Location : getForcePINChange
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getForcePINChange → SURVIVED

+
283 + + + +

1.1
Location : getMinPINLength
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMinPINLength → SURVIVED

+
292 + + + +

1.1
Location : getFirmwareVersion
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getFirmwareVersion → SURVIVED

+
301 + + + +

1.1
Location : getMaxCredBlobLength
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredBlobLength → SURVIVED

+
310 + + + +

1.1
Location : getMaxRPIDsForSetMinPINLength
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxRPIDsForSetMinPINLength → SURVIVED

+
319 + + + +

1.1
Location : getPreferredPlatformUvAttempts
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getPreferredPlatformUvAttempts → SURVIVED

+
328 + + + +

1.1
Location : getUvModality
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getUvModality → SURVIVED

+
337 + + + +

1.1
Location : getCertifications
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getCertifications → SURVIVED

+
346 + + + +

1.1
Location : getRemainingDiscoverableCredentials
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getRemainingDiscoverableCredentials → SURVIVED

+
355 + + + +

1.1
Location : getVendorPrototypeConfigCommands
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getVendorPrototypeConfigCommands → SURVIVED

+
364 + + + +

1.1
Location : deserialize
Killed by : com.yubico.fido.metadata.JsonIoSpec
replaced return value with Collections.emptySet for com/yubico/fido/metadata/AuthenticatorGetInfo$SetFromIntJsonDeserializer::deserialize → KILLED

+
365 + + + +

1.1
Location : lambda$deserialize$0
Killed by : com.yubico.fido.metadata.JsonIoSpec
Replaced bitwise AND with OR → KILLED

2.2
Location : lambda$deserialize$0
Killed by : com.yubico.fido.metadata.JsonIoSpec
negated conditional → KILLED

3.3
Location : lambda$deserialize$0
Killed by : com.yubico.fido.metadata.JsonIoSpec
replaced boolean return with true for com/yubico/fido/metadata/AuthenticatorGetInfo$SetFromIntJsonDeserializer::lambda$deserialize$0 → KILLED

+
376 + + + +

1.1
Location : serialize
Killed by : com.yubico.fido.metadata.JsonIoSpec
removed call to com/fasterxml/jackson/core/JsonGenerator::writeNumber → KILLED

+
377 + + + +

1.1
Location : lambda$serialize$1
Killed by : none
Replaced bitwise OR with AND → NO_COVERAGE

2.2
Location : lambda$serialize$0
Killed by : com.yubico.fido.metadata.JsonIoSpec
replaced Integer return value with 0 for com/yubico/fido/metadata/AuthenticatorGetInfo$IntFromSetJsonSerializer::lambda$serialize$0 → KILLED

3.3
Location : lambda$serialize$1
Killed by : none
replaced Integer return value with 0 for com/yubico/fido/metadata/AuthenticatorGetInfo$IntFromSetJsonSerializer::lambda$serialize$1 → NO_COVERAGE

4.4
Location : lambda$serialize$0
Killed by : com.yubico.fido.metadata.JsonIoSpec
Replaced bitwise OR with AND → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/BiometricAccuracyDescriptor.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/BiometricAccuracyDescriptor.java.html new file mode 100644 index 000000000..5fcc5ea58 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/BiometricAccuracyDescriptor.java.html @@ -0,0 +1,1234 @@ + + + + + + + + + +

BiometricAccuracyDescriptor.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import java.util.Optional;
+ +4 + + + + + + +
import lombok.Builder;
+ +5 + + + + + + +
import lombok.Value;
+ +6 + + + + + + +
import lombok.extern.jackson.Jacksonized;
+ +7 + + + + + + +
+ +8 + + + + + + +
/**
+ +9 + + + + + + +
 * The BiometricAccuracyDescriptor describes relevant accuracy/complexity aspects in the case of a
+ +10 + + + + + + +
 * biometric user verification method, see [<a
+ +11 + + + + + + +
 * href="https://fidoalliance.org/specs/biometric/requirements/Biometrics-Requirements-v2.0-fd-20201006.html">FIDOBiometricsRequirements</a>].
+ +12 + + + + + + +
 *
+ +13 + + + + + + +
 * <p>At least one of the values MUST be set. If the vendor doesn’t want to specify such values,
+ +14 + + + + + + +
 * then {@link VerificationMethodDescriptor#getBaDesc()} MUST be omitted.
+ +15 + + + + + + +
 *
+ +16 + + + + + + +
 * @see <a
+ +17 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#biometricaccuracydescriptor-dictionary">FIDO
+ +18 + + + + + + +
 *     Metadata Statement §3.3. BiometricAccuracyDescriptor dictionary</a>
+ +19 + + + + + + +
 */
+ +20 + + + + + + +
@Value
+ +21 + + + + + + +
@Builder(toBuilder = true)
+ +22 + + + + + + +
@Jacksonized
+ +23 + + + + + + +
public class BiometricAccuracyDescriptor {
+ +24 + + + + + + +
+ +25 + + + + + + +
  Double selfAttestedFRR;
+ +26 + + + + + + +
  Double selfAttestedFAR;
+ +27 + + + + + + +
  Integer maxTemplates;
+ +28 + + + + + + +
  Integer maxRetries;
+ +29 + + + + + + +
  Integer blockSlowdown;
+ +30 + + + + + + +
+ +31 + + + + + + +
  /**
+ +32 + + + + + + +
   * @see <a
+ +33 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#biometricaccuracydescriptor-dictionary">FIDO
+ +34 + + + + + + +
   *     Metadata Statement §3.3. BiometricAccuracyDescriptor dictionary</a>
+ +35 + + + + + + +
   */
+ +36 + + + + + + +
  public Optional<Double> getSelfAttestedFRR() {
+ +37 + + +1 + +1. getSelfAttestedFRR : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getSelfAttestedFRR → SURVIVED
+ +
+
+
    return Optional.ofNullable(selfAttestedFRR);
+ +38 + + + + + + +
  }
+ +39 + + + + + + +
+ +40 + + + + + + +
  /**
+ +41 + + + + + + +
   * @see <a
+ +42 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#biometricaccuracydescriptor-dictionary">FIDO
+ +43 + + + + + + +
   *     Metadata Statement §3.3. BiometricAccuracyDescriptor dictionary</a>
+ +44 + + + + + + +
   */
+ +45 + + + + + + +
  public Optional<Double> getSelfAttestedFAR() {
+ +46 + + +1 + +1. getSelfAttestedFAR : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getSelfAttestedFAR → SURVIVED
+ +
+
+
    return Optional.ofNullable(selfAttestedFAR);
+ +47 + + + + + + +
  }
+ +48 + + + + + + +
+ +49 + + + + + + +
  /**
+ +50 + + + + + + +
   * @see <a
+ +51 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#biometricaccuracydescriptor-dictionary">FIDO
+ +52 + + + + + + +
   *     Metadata Statement §3.3. BiometricAccuracyDescriptor dictionary</a>
+ +53 + + + + + + +
   */
+ +54 + + + + + + +
  public Optional<Integer> getMaxTemplates() {
+ +55 + + +1 + +1. getMaxTemplates : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getMaxTemplates → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxTemplates);
+ +56 + + + + + + +
  }
+ +57 + + + + + + +
+ +58 + + + + + + +
  /**
+ +59 + + + + + + +
   * @see <a
+ +60 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#biometricaccuracydescriptor-dictionary">FIDO
+ +61 + + + + + + +
   *     Metadata Statement §3.3. BiometricAccuracyDescriptor dictionary</a>
+ +62 + + + + + + +
   */
+ +63 + + + + + + +
  public Optional<Integer> getMaxRetries() {
+ +64 + + +1 + +1. getMaxRetries : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getMaxRetries → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxRetries);
+ +65 + + + + + + +
  }
+ +66 + + + + + + +
+ +67 + + + + + + +
  /**
+ +68 + + + + + + +
   * @see <a
+ +69 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#biometricaccuracydescriptor-dictionary">FIDO
+ +70 + + + + + + +
   *     Metadata Statement §3.3. BiometricAccuracyDescriptor dictionary</a>
+ +71 + + + + + + +
   */
+ +72 + + + + + + +
  public Optional<Integer> getBlockSlowdown() {
+ +73 + + +1 + +1. getBlockSlowdown : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getBlockSlowdown → SURVIVED
+ +
+
+
    return Optional.ofNullable(blockSlowdown);
+ +74 + + + + + + +
  }
+ +75 + + + + + + +
}

Mutations

37 + + + +

1.1
Location : getSelfAttestedFRR
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getSelfAttestedFRR → SURVIVED

+
46 + + + +

1.1
Location : getSelfAttestedFAR
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getSelfAttestedFAR → SURVIVED

+
55 + + + +

1.1
Location : getMaxTemplates
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getMaxTemplates → SURVIVED

+
64 + + + +

1.1
Location : getMaxRetries
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getMaxRetries → SURVIVED

+
73 + + + +

1.1
Location : getBlockSlowdown
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getBlockSlowdown → SURVIVED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/BiometricStatusReport.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/BiometricStatusReport.java.html new file mode 100644 index 000000000..b7825416d --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/BiometricStatusReport.java.html @@ -0,0 +1,1414 @@ + + + + + + + + + +

BiometricStatusReport.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.yubico.webauthn.extension.uvm.UserVerificationMethod;
+ +4 + + + + + + +
import java.time.LocalDate;
+ +5 + + + + + + +
import java.util.Optional;
+ +6 + + + + + + +
import lombok.Builder;
+ +7 + + + + + + +
import lombok.NonNull;
+ +8 + + + + + + +
import lombok.Value;
+ +9 + + + + + + +
import lombok.extern.jackson.Jacksonized;
+ +10 + + + + + + +
+ +11 + + + + + + +
/**
+ +12 + + + + + + +
 * Contains the current BiometricStatusReport of one of the authenticator’s biometric component.
+ +13 + + + + + + +
 *
+ +14 + + + + + + +
 * @see <a
+ +15 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biometricstatusreport-dictionary">FIDO
+ +16 + + + + + + +
 *     Metadata Service §3.1.2. BiometricStatusReport dictionary</a>
+ +17 + + + + + + +
 */
+ +18 + + + + + + +
@Value
+ +19 + + + + + + +
@Builder(toBuilder = true)
+ +20 + + + + + + +
@Jacksonized
+ +21 + + + + + + +
public class BiometricStatusReport {
+ +22 + + + + + + +
+ +23 + + + + + + +
  /**
+ +24 + + + + + + +
   * @see <a
+ +25 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biometricstatusreport-dictionary">FIDO
+ +26 + + + + + + +
   *     Metadata Service §3.1.2. BiometricStatusReport dictionary</a>
+ +27 + + + + + + +
   */
+ +28 + + + + + + +
  int certLevel;
+ +29 + + + + + + +
+ +30 + + + + + + +
  /**
+ +31 + + + + + + +
   * @see <a
+ +32 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biometricstatusreport-dictionary">FIDO
+ +33 + + + + + + +
   *     Metadata Service §3.1.2. BiometricStatusReport dictionary</a>
+ +34 + + + + + + +
   */
+ +35 + + + + + + +
  @NonNull UserVerificationMethod modality;
+ +36 + + + + + + +
+ +37 + + + + + + +
  LocalDate effectiveDate;
+ +38 + + + + + + +
  String certificationDescriptor;
+ +39 + + + + + + +
  String certificateNumber;
+ +40 + + + + + + +
  String certificationPolicyVersion;
+ +41 + + + + + + +
  String certificationRequirementsVersion;
+ +42 + + + + + + +
+ +43 + + + + + + +
  /**
+ +44 + + + + + + +
   * @see <a
+ +45 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biometricstatusreport-dictionary">FIDO
+ +46 + + + + + + +
   *     Metadata Service §3.1.2. BiometricStatusReport dictionary</a>
+ +47 + + + + + + +
   */
+ +48 + + + + + + +
  public Optional<LocalDate> getEffectiveDate() {
+ +49 + + +1 + +1. getEffectiveDate : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getEffectiveDate → SURVIVED
+ +
+
+
    return Optional.ofNullable(effectiveDate);
+ +50 + + + + + + +
  }
+ +51 + + + + + + +
+ +52 + + + + + + +
  /**
+ +53 + + + + + + +
   * @see <a
+ +54 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biometricstatusreport-dictionary">FIDO
+ +55 + + + + + + +
   *     Metadata Service §3.1.2. BiometricStatusReport dictionary</a>
+ +56 + + + + + + +
   */
+ +57 + + + + + + +
  public Optional<String> getCertificationDescriptor() {
+ +58 + + +1 + +1. getCertificationDescriptor : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationDescriptor → SURVIVED
+ +
+
+
    return Optional.ofNullable(certificationDescriptor);
+ +59 + + + + + + +
  }
+ +60 + + + + + + +
+ +61 + + + + + + +
  /**
+ +62 + + + + + + +
   * @see <a
+ +63 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biometricstatusreport-dictionary">FIDO
+ +64 + + + + + + +
   *     Metadata Service §3.1.2. BiometricStatusReport dictionary</a>
+ +65 + + + + + + +
   */
+ +66 + + + + + + +
  public Optional<String> getCertificateNumber() {
+ +67 + + +1 + +1. getCertificateNumber : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificateNumber → SURVIVED
+ +
+
+
    return Optional.ofNullable(certificateNumber);
+ +68 + + + + + + +
  }
+ +69 + + + + + + +
+ +70 + + + + + + +
  /**
+ +71 + + + + + + +
   * @see <a
+ +72 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biometricstatusreport-dictionary">FIDO
+ +73 + + + + + + +
   *     Metadata Service §3.1.2. BiometricStatusReport dictionary</a>
+ +74 + + + + + + +
   */
+ +75 + + + + + + +
  public Optional<String> getCertificationPolicyVersion() {
+ +76 + + +1 + +1. getCertificationPolicyVersion : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationPolicyVersion → SURVIVED
+ +
+
+
    return Optional.ofNullable(certificationPolicyVersion);
+ +77 + + + + + + +
  }
+ +78 + + + + + + +
+ +79 + + + + + + +
  /**
+ +80 + + + + + + +
   * @see <a
+ +81 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biometricstatusreport-dictionary">FIDO
+ +82 + + + + + + +
   *     Metadata Service §3.1.2. BiometricStatusReport dictionary</a>
+ +83 + + + + + + +
   */
+ +84 + + + + + + +
  public Optional<String> getCertificationRequirementsVersion() {
+ +85 + + +1 + +1. getCertificationRequirementsVersion : replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationRequirementsVersion → SURVIVED
+ +
+
+
    return Optional.ofNullable(certificationRequirementsVersion);
+ +86 + + + + + + +
  }
+ +87 + + + + + + +
}

Mutations

49 + + + +

1.1
Location : getEffectiveDate
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getEffectiveDate → SURVIVED

+
58 + + + +

1.1
Location : getCertificationDescriptor
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationDescriptor → SURVIVED

+
67 + + + +

1.1
Location : getCertificateNumber
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificateNumber → SURVIVED

+
76 + + + +

1.1
Location : getCertificationPolicyVersion
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationPolicyVersion → SURVIVED

+
85 + + + +

1.1
Location : getCertificationRequirementsVersion
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationRequirementsVersion → SURVIVED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CertFromBase64Converter.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CertFromBase64Converter.java.html new file mode 100644 index 000000000..e2ea73026 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CertFromBase64Converter.java.html @@ -0,0 +1,550 @@ + + + + + + + + + +

CertFromBase64Converter.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.databind.JavaType;
+ +4 + + + + + + +
import com.fasterxml.jackson.databind.type.TypeFactory;
+ +5 + + + + + + +
import com.fasterxml.jackson.databind.util.Converter;
+ +6 + + + + + + +
import com.yubico.internal.util.CertificateParser;
+ +7 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +8 + + + + + + +
import java.security.cert.CertificateException;
+ +9 + + + + + + +
import java.security.cert.X509Certificate;
+ +10 + + + + + + +
+ +11 + + + + + + +
class CertFromBase64Converter implements Converter<String, X509Certificate> {
+ +12 + + + + + + +
  @Override
+ +13 + + + + + + +
  public X509Certificate convert(String value) {
+ +14 + + + + + + +
    try {
+ +15 + + +1 + +1. convert : replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::convert → KILLED
+ +
+
+
      return CertificateParser.parseDer(
+ +16 + + + + + + +
          ByteArray.fromBase64(value.replaceAll("\\s+", "")).getBytes());
+ +17 + + + + + + +
    } catch (CertificateException e) {
+ +18 + + + + + + +
      throw new RuntimeException(e);
+ +19 + + + + + + +
    }
+ +20 + + + + + + +
  }
+ +21 + + + + + + +
+ +22 + + + + + + +
  @Override
+ +23 + + + + + + +
  public JavaType getInputType(TypeFactory typeFactory) {
+ +24 + + +1 + +1. getInputType : replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::getInputType → KILLED
+ +
+
+
    return typeFactory.constructType(String.class);
+ +25 + + + + + + +
  }
+ +26 + + + + + + +
+ +27 + + + + + + +
  @Override
+ +28 + + + + + + +
  public JavaType getOutputType(TypeFactory typeFactory) {
+ +29 + + +1 + +1. getOutputType : replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::getOutputType → NO_COVERAGE
+ +
+
+
    return typeFactory.constructType(X509Certificate.class);
+ +30 + + + + + + +
  }
+ +31 + + + + + + +
}

Mutations

15 + + + +

1.1
Location : convert
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::convert → KILLED

+
24 + + + +

1.1
Location : getInputType
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::getInputType → KILLED

+
29 + + + +

1.1
Location : getOutputType
Killed by : none
replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::getOutputType → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CertToBase64Converter.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CertToBase64Converter.java.html new file mode 100644 index 000000000..24206bf54 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CertToBase64Converter.java.html @@ -0,0 +1,520 @@ + + + + + + + + + +

CertToBase64Converter.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.databind.JavaType;
+ +4 + + + + + + +
import com.fasterxml.jackson.databind.type.TypeFactory;
+ +5 + + + + + + +
import com.fasterxml.jackson.databind.util.Converter;
+ +6 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +7 + + + + + + +
import java.security.cert.CertificateEncodingException;
+ +8 + + + + + + +
import java.security.cert.X509Certificate;
+ +9 + + + + + + +
+ +10 + + + + + + +
class CertToBase64Converter implements Converter<X509Certificate, String> {
+ +11 + + + + + + +
  @Override
+ +12 + + + + + + +
  public String convert(X509Certificate value) {
+ +13 + + + + + + +
    try {
+ +14 + + +1 + +1. convert : replaced return value with "" for com/yubico/fido/metadata/CertToBase64Converter::convert → KILLED
+ +
+
+
      return new ByteArray(value.getEncoded()).getBase64();
+ +15 + + + + + + +
    } catch (CertificateEncodingException e) {
+ +16 + + + + + + +
      throw new RuntimeException(e);
+ +17 + + + + + + +
    }
+ +18 + + + + + + +
  }
+ +19 + + + + + + +
+ +20 + + + + + + +
  @Override
+ +21 + + + + + + +
  public JavaType getInputType(TypeFactory typeFactory) {
+ +22 + + +1 + +1. getInputType : replaced return value with null for com/yubico/fido/metadata/CertToBase64Converter::getInputType → NO_COVERAGE
+ +
+
+
    return typeFactory.constructType(X509Certificate.class);
+ +23 + + + + + + +
  }
+ +24 + + + + + + +
+ +25 + + + + + + +
  @Override
+ +26 + + + + + + +
  public JavaType getOutputType(TypeFactory typeFactory) {
+ +27 + + +1 + +1. getOutputType : replaced return value with null for com/yubico/fido/metadata/CertToBase64Converter::getOutputType → KILLED
+ +
+
+
    return typeFactory.constructType(String.class);
+ +28 + + + + + + +
  }
+ +29 + + + + + + +
}

Mutations

14 + + + +

1.1
Location : convert
Killed by : com.yubico.fido.metadata.JsonIoSpec
replaced return value with "" for com/yubico/fido/metadata/CertToBase64Converter::convert → KILLED

+
22 + + + +

1.1
Location : getInputType
Killed by : none
replaced return value with null for com/yubico/fido/metadata/CertToBase64Converter::getInputType → NO_COVERAGE

+
27 + + + +

1.1
Location : getOutputType
Killed by : com.yubico.fido.metadata.JsonIoSpec
replaced return value with null for com/yubico/fido/metadata/CertToBase64Converter::getOutputType → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CodeAccuracyDescriptor.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CodeAccuracyDescriptor.java.html new file mode 100644 index 000000000..1cd333c61 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/CodeAccuracyDescriptor.java.html @@ -0,0 +1,898 @@ + + + + + + + + + +

CodeAccuracyDescriptor.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import java.util.Optional;
+ +4 + + + + + + +
import lombok.Builder;
+ +5 + + + + + + +
import lombok.Value;
+ +6 + + + + + + +
import lombok.extern.jackson.Jacksonized;
+ +7 + + + + + + +
+ +8 + + + + + + +
/**
+ +9 + + + + + + +
 * The CodeAccuracyDescriptor describes the relevant accuracy/complexity aspects of passcode user
+ +10 + + + + + + +
 * verification methods.
+ +11 + + + + + + +
 *
+ +12 + + + + + + +
 * @see <a
+ +13 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#codeaccuracydescriptor-dictionary">FIDO
+ +14 + + + + + + +
 *     Metadata Statement §3.2. CodeAccuracyDescriptor dictionary</a>
+ +15 + + + + + + +
 */
+ +16 + + + + + + +
@Value
+ +17 + + + + + + +
@Builder(toBuilder = true)
+ +18 + + + + + + +
@Jacksonized
+ +19 + + + + + + +
public class CodeAccuracyDescriptor {
+ +20 + + + + + + +
+ +21 + + + + + + +
  /**
+ +22 + + + + + + +
   * @see <a
+ +23 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#codeaccuracydescriptor-dictionary">FIDO
+ +24 + + + + + + +
   *     Metadata Statement §3.2. CodeAccuracyDescriptor dictionary</a>
+ +25 + + + + + + +
   */
+ +26 + + + + + + +
  int base;
+ +27 + + + + + + +
+ +28 + + + + + + +
  /**
+ +29 + + + + + + +
   * @see <a
+ +30 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#codeaccuracydescriptor-dictionary">FIDO
+ +31 + + + + + + +
   *     Metadata Statement §3.2. CodeAccuracyDescriptor dictionary</a>
+ +32 + + + + + + +
   */
+ +33 + + + + + + +
  int minLength;
+ +34 + + + + + + +
+ +35 + + + + + + +
  Integer maxRetries;
+ +36 + + + + + + +
  Integer blockSlowdown;
+ +37 + + + + + + +
+ +38 + + + + + + +
  /**
+ +39 + + + + + + +
   * @see <a
+ +40 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#codeaccuracydescriptor-dictionary">FIDO
+ +41 + + + + + + +
   *     Metadata Statement §3.2. CodeAccuracyDescriptor dictionary</a>
+ +42 + + + + + + +
   */
+ +43 + + + + + + +
  public Optional<Integer> getMaxRetries() {
+ +44 + + +1 + +1. getMaxRetries : replaced return value with Optional.empty for com/yubico/fido/metadata/CodeAccuracyDescriptor::getMaxRetries → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxRetries);
+ +45 + + + + + + +
  }
+ +46 + + + + + + +
+ +47 + + + + + + +
  /**
+ +48 + + + + + + +
   * @see <a
+ +49 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#codeaccuracydescriptor-dictionary">FIDO
+ +50 + + + + + + +
   *     Metadata Statement §3.2. CodeAccuracyDescriptor dictionary</a>
+ +51 + + + + + + +
   */
+ +52 + + + + + + +
  public Optional<Integer> getBlockSlowdown() {
+ +53 + + +1 + +1. getBlockSlowdown : replaced return value with Optional.empty for com/yubico/fido/metadata/CodeAccuracyDescriptor::getBlockSlowdown → SURVIVED
+ +
+
+
    return Optional.ofNullable(blockSlowdown);
+ +54 + + + + + + +
  }
+ +55 + + + + + + +
}

Mutations

44 + + + +

1.1
Location : getMaxRetries
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/CodeAccuracyDescriptor::getMaxRetries → SURVIVED

+
53 + + + +

1.1
Location : getBlockSlowdown
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/CodeAccuracyDescriptor::getBlockSlowdown → SURVIVED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataDownloader.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataDownloader.java.html new file mode 100644 index 000000000..fbd045571 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataDownloader.java.html @@ -0,0 +1,19576 @@ + + + + + + + + + +

FidoMetadataDownloader.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2015-2021, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.fido.metadata;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.core.Base64Variants;
+ +28 + + + + + + +
import com.fasterxml.jackson.databind.DeserializationFeature;
+ +29 + + + + + + +
import com.fasterxml.jackson.databind.ObjectMapper;
+ +30 + + + + + + +
import com.yubico.fido.metadata.FidoMetadataDownloaderException.Reason;
+ +31 + + + + + + +
import com.yubico.internal.util.BinaryUtil;
+ +32 + + + + + + +
import com.yubico.internal.util.CertificateParser;
+ +33 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +34 + + + + + + +
import com.yubico.webauthn.data.exception.Base64UrlException;
+ +35 + + + + + + +
import com.yubico.webauthn.data.exception.HexException;
+ +36 + + + + + + +
import java.io.ByteArrayInputStream;
+ +37 + + + + + + +
import java.io.File;
+ +38 + + + + + + +
import java.io.FileInputStream;
+ +39 + + + + + + +
import java.io.FileNotFoundException;
+ +40 + + + + + + +
import java.io.FileOutputStream;
+ +41 + + + + + + +
import java.io.IOException;
+ +42 + + + + + + +
import java.io.InputStream;
+ +43 + + + + + + +
import java.net.MalformedURLException;
+ +44 + + + + + + +
import java.net.URL;
+ +45 + + + + + + +
import java.net.URLConnection;
+ +46 + + + + + + +
import java.nio.charset.StandardCharsets;
+ +47 + + + + + + +
import java.security.DigestException;
+ +48 + + + + + + +
import java.security.InvalidAlgorithmParameterException;
+ +49 + + + + + + +
import java.security.InvalidKeyException;
+ +50 + + + + + + +
import java.security.KeyManagementException;
+ +51 + + + + + + +
import java.security.KeyStore;
+ +52 + + + + + + +
import java.security.KeyStoreException;
+ +53 + + + + + + +
import java.security.MessageDigest;
+ +54 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +55 + + + + + + +
import java.security.Signature;
+ +56 + + + + + + +
import java.security.SignatureException;
+ +57 + + + + + + +
import java.security.cert.CRL;
+ +58 + + + + + + +
import java.security.cert.CertPath;
+ +59 + + + + + + +
import java.security.cert.CertPathValidator;
+ +60 + + + + + + +
import java.security.cert.CertPathValidatorException;
+ +61 + + + + + + +
import java.security.cert.CertStore;
+ +62 + + + + + + +
import java.security.cert.CertStoreParameters;
+ +63 + + + + + + +
import java.security.cert.CertificateException;
+ +64 + + + + + + +
import java.security.cert.CertificateFactory;
+ +65 + + + + + + +
import java.security.cert.CollectionCertStoreParameters;
+ +66 + + + + + + +
import java.security.cert.PKIXParameters;
+ +67 + + + + + + +
import java.security.cert.TrustAnchor;
+ +68 + + + + + + +
import java.security.cert.X509Certificate;
+ +69 + + + + + + +
import java.time.Clock;
+ +70 + + + + + + +
import java.util.ArrayList;
+ +71 + + + + + + +
import java.util.Collection;
+ +72 + + + + + + +
import java.util.Collections;
+ +73 + + + + + + +
import java.util.Date;
+ +74 + + + + + + +
import java.util.List;
+ +75 + + + + + + +
import java.util.Optional;
+ +76 + + + + + + +
import java.util.Scanner;
+ +77 + + + + + + +
import java.util.Set;
+ +78 + + + + + + +
import java.util.UUID;
+ +79 + + + + + + +
import java.util.function.Consumer;
+ +80 + + + + + + +
import java.util.function.Supplier;
+ +81 + + + + + + +
import java.util.stream.Collectors;
+ +82 + + + + + + +
import java.util.stream.Stream;
+ +83 + + + + + + +
import javax.net.ssl.HttpsURLConnection;
+ +84 + + + + + + +
import javax.net.ssl.SSLContext;
+ +85 + + + + + + +
import javax.net.ssl.TrustManagerFactory;
+ +86 + + + + + + +
import lombok.AccessLevel;
+ +87 + + + + + + +
import lombok.AllArgsConstructor;
+ +88 + + + + + + +
import lombok.NonNull;
+ +89 + + + + + + +
import lombok.RequiredArgsConstructor;
+ +90 + + + + + + +
import lombok.Value;
+ +91 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +92 + + + + + + +
+ +93 + + + + + + +
/**
+ +94 + + + + + + +
 * Utility for downloading, caching and verifying Fido Metadata Service BLOBs and associated
+ +95 + + + + + + +
 * certificates.
+ +96 + + + + + + +
 *
+ +97 + + + + + + +
 * <p>This class is NOT THREAD SAFE since it reads and writes caches. However, it has no internal
+ +98 + + + + + + +
 * mutable state, so instances MAY be reused in single-threaded or externally synchronized contexts.
+ +99 + + + + + + +
 * See also the {@link #loadCachedBlob()} and {@link #refreshBlob()} methods.
+ +100 + + + + + + +
 *
+ +101 + + + + + + +
 * <p>Use the {@link #builder() builder} to configure settings, then use the {@link
+ +102 + + + + + + +
 * #loadCachedBlob()} and {@link #refreshBlob()} methods to load the metadata BLOB.
+ +103 + + + + + + +
 */
+ +104 + + + + + + +
@Slf4j
+ +105 + + + + + + +
@AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +106 + + + + + + +
public final class FidoMetadataDownloader {
+ +107 + + + + + + +
+ +108 + + + + + + +
  @NonNull private final Set<String> expectedLegalHeaders;
+ +109 + + + + + + +
  private final X509Certificate trustRootCertificate;
+ +110 + + + + + + +
  private final URL trustRootUrl;
+ +111 + + + + + + +
  private final Set<ByteArray> trustRootSha256;
+ +112 + + + + + + +
  private final File trustRootCacheFile;
+ +113 + + + + + + +
  private final Supplier<Optional<ByteArray>> trustRootCacheSupplier;
+ +114 + + + + + + +
  private final Consumer<ByteArray> trustRootCacheConsumer;
+ +115 + + + + + + +
  private final String blobJwt;
+ +116 + + + + + + +
  private final URL blobUrl;
+ +117 + + + + + + +
  private final File blobCacheFile;
+ +118 + + + + + + +
  private final Supplier<Optional<ByteArray>> blobCacheSupplier;
+ +119 + + + + + + +
  private final Consumer<ByteArray> blobCacheConsumer;
+ +120 + + + + + + +
  private final CertStore certStore;
+ +121 + + + + + + +
  @NonNull private final Clock clock;
+ +122 + + + + + + +
  private final KeyStore httpsTrustStore;
+ +123 + + + + + + +
  private final boolean verifyDownloadsOnly;
+ +124 + + + + + + +
+ +125 + + + + + + +
  /**
+ +126 + + + + + + +
   * Begin configuring a {@link FidoMetadataDownloader} instance. See the {@link
+ +127 + + + + + + +
   * FidoMetadataDownloaderBuilder.Step1 Step1} type.
+ +128 + + + + + + +
   *
+ +129 + + + + + + +
   * @see FidoMetadataDownloaderBuilder.Step1
+ +130 + + + + + + +
   */
+ +131 + + + + + + +
  public static FidoMetadataDownloaderBuilder.Step1 builder() {
+ +132 + + +1 + +1. builder : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::builder → KILLED
+ +
+
+
    return new FidoMetadataDownloaderBuilder.Step1();
+ +133 + + + + + + +
  }
+ +134 + + + + + + +
+ +135 + + + + + + +
  @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
+ +136 + + + + + + +
  public static class FidoMetadataDownloaderBuilder {
+ +137 + + + + + + +
    @NonNull private final Set<String> expectedLegalHeaders;
+ +138 + + + + + + +
    private final X509Certificate trustRootCertificate;
+ +139 + + + + + + +
    private final URL trustRootUrl;
+ +140 + + + + + + +
    private final Set<ByteArray> trustRootSha256;
+ +141 + + + + + + +
    private final File trustRootCacheFile;
+ +142 + + + + + + +
    private final Supplier<Optional<ByteArray>> trustRootCacheSupplier;
+ +143 + + + + + + +
    private final Consumer<ByteArray> trustRootCacheConsumer;
+ +144 + + + + + + +
    private final String blobJwt;
+ +145 + + + + + + +
    private final URL blobUrl;
+ +146 + + + + + + +
    private final File blobCacheFile;
+ +147 + + + + + + +
    private final Supplier<Optional<ByteArray>> blobCacheSupplier;
+ +148 + + + + + + +
    private final Consumer<ByteArray> blobCacheConsumer;
+ +149 + + + + + + +
+ +150 + + + + + + +
    private CertStore certStore = null;
+ +151 + + + + + + +
    @NonNull private Clock clock = Clock.systemUTC();
+ +152 + + + + + + +
    private KeyStore httpsTrustStore = null;
+ +153 + + + + + + +
    private boolean verifyDownloadsOnly = false;
+ +154 + + + + + + +
+ +155 + + + + + + +
    public FidoMetadataDownloader build() {
+ +156 + + +1 + +1. build : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::build → KILLED
+ +
+
+
      return new FidoMetadataDownloader(
+ +157 + + + + + + +
          expectedLegalHeaders,
+ +158 + + + + + + +
          trustRootCertificate,
+ +159 + + + + + + +
          trustRootUrl,
+ +160 + + + + + + +
          trustRootSha256,
+ +161 + + + + + + +
          trustRootCacheFile,
+ +162 + + + + + + +
          trustRootCacheSupplier,
+ +163 + + + + + + +
          trustRootCacheConsumer,
+ +164 + + + + + + +
          blobJwt,
+ +165 + + + + + + +
          blobUrl,
+ +166 + + + + + + +
          blobCacheFile,
+ +167 + + + + + + +
          blobCacheSupplier,
+ +168 + + + + + + +
          blobCacheConsumer,
+ +169 + + + + + + +
          certStore,
+ +170 + + + + + + +
          clock,
+ +171 + + + + + + +
          httpsTrustStore,
+ +172 + + + + + + +
          verifyDownloadsOnly);
+ +173 + + + + + + +
    }
+ +174 + + + + + + +
+ +175 + + + + + + +
    /**
+ +176 + + + + + + +
     * Step 1: Set the legal header to expect from the FIDO Metadata Service.
+ +177 + + + + + + +
     *
+ +178 + + + + + + +
     * <p>By using the FIDO Metadata Service, you will be subject to its terms of service. This step
+ +179 + + + + + + +
     * serves two purposes:
+ +180 + + + + + + +
     *
+ +181 + + + + + + +
     * <ol>
+ +182 + + + + + + +
     *   <li>To remind you and any code reviewers that you need to read those terms of service
+ +183 + + + + + + +
     *       before using this feature.
+ +184 + + + + + + +
     *   <li>To help you detect if the legal header changes, so you can take appropriate action.
+ +185 + + + + + + +
     * </ol>
+ +186 + + + + + + +
     *
+ +187 + + + + + + +
     * <p>See {@link Step1#expectLegalHeader(String...)}.
+ +188 + + + + + + +
     *
+ +189 + + + + + + +
     * @see Step1#expectLegalHeader(String...)
+ +190 + + + + + + +
     */
+ +191 + + + + + + +
    @AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +192 + + + + + + +
    public static class Step1 {
+ +193 + + + + + + +
+ +194 + + + + + + +
      /**
+ +195 + + + + + + +
       * Set legal headers expected in the metadata BLOB.
+ +196 + + + + + + +
       *
+ +197 + + + + + + +
       * <p>By using the FIDO Metadata Service, you will be subject to its terms of service. This
+ +198 + + + + + + +
       * builder step serves two purposes:
+ +199 + + + + + + +
       *
+ +200 + + + + + + +
       * <ol>
+ +201 + + + + + + +
       *   <li>To remind you and any code reviewers that you need to read those terms of service
+ +202 + + + + + + +
       *       before using this feature.
+ +203 + + + + + + +
       *   <li>To help you detect if the legal header changes, so you can take appropriate action.
+ +204 + + + + + + +
       * </ol>
+ +205 + + + + + + +
       *
+ +206 + + + + + + +
       * <p>If the legal header in the downloaded BLOB does not equal any of the <code>
+ +207 + + + + + + +
       * expectedLegalHeaders</code>, an {@link UnexpectedLegalHeader} exception will be thrown in
+ +208 + + + + + + +
       * the finalizing builder step.
+ +209 + + + + + + +
       *
+ +210 + + + + + + +
       * <p>Note that this library makes no guarantee that a change to the FIDO Metadata Service
+ +211 + + + + + + +
       * terms of service will also cause a change to the legal header in the BLOB.
+ +212 + + + + + + +
       *
+ +213 + + + + + + +
       * <p>At the time of this library release, the current legal header is <code>
+ +214 + + + + + + +
       * "Retrieval and use of this BLOB indicates acceptance of the appropriate agreement located at https://fidoalliance.org/metadata/metadata-legal-terms/"
+ +215 + + + + + + +
       * </code>.
+ +216 + + + + + + +
       *
+ +217 + + + + + + +
       * @param expectedLegalHeaders the set of BLOB legal headers you expect in the metadata BLOB
+ +218 + + + + + + +
       *     payload.
+ +219 + + + + + + +
       */
+ +220 + + +1 + +1. expectLegalHeader : negated conditional → KILLED
+ +
+
+
      public Step2 expectLegalHeader(@NonNull String... expectedLegalHeaders) {
+ +221 + + +1 + +1. expectLegalHeader : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1::expectLegalHeader → KILLED
+ +
+
+
        return new Step2(Stream.of(expectedLegalHeaders).collect(Collectors.toSet()));
+ +222 + + + + + + +
      }
+ +223 + + + + + + +
    }
+ +224 + + + + + + +
+ +225 + + + + + + +
    /**
+ +226 + + + + + + +
     * Step 2: Configure how to retrieve the FIDO Metadata Service trust root certificate when
+ +227 + + + + + + +
     * necessary.
+ +228 + + + + + + +
     *
+ +229 + + + + + + +
     * <p>This step offers three mutually exclusive options:
+ +230 + + + + + + +
     *
+ +231 + + + + + + +
     * <ol>
+ +232 + + + + + + +
     *   <li>Use the default download URL and certificate hash. This is the main intended use case.
+ +233 + + + + + + +
     *       See {@link #useDefaultTrustRoot()}.
+ +234 + + + + + + +
     *   <li>Use a custom download URL and certificate hash. This is for future-proofing in case the
+ +235 + + + + + + +
     *       trust root certificate changes and there is no new release of this library. See {@link
+ +236 + + + + + + +
     *       #downloadTrustRoot(URL, Set)}.
+ +237 + + + + + + +
     *   <li>Use a pre-retrieved trust root certificate. It is up to you to perform any integrity
+ +238 + + + + + + +
     *       checks and cache it as desired. See {@link #useTrustRoot(X509Certificate)}.
+ +239 + + + + + + +
     * </ol>
+ +240 + + + + + + +
     */
+ +241 + + + + + + +
    @AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +242 + + + + + + +
    public static class Step2 {
+ +243 + + + + + + +
+ +244 + + + + + + +
      @NonNull private final Set<String> expectedLegalHeaders;
+ +245 + + + + + + +
+ +246 + + + + + + +
      /**
+ +247 + + + + + + +
       * Download the trust root certificate from a hard-coded URL and verify it against a
+ +248 + + + + + + +
       * hard-coded SHA-256 hash.
+ +249 + + + + + + +
       *
+ +250 + + + + + + +
       * <p>This is an alias of:
+ +251 + + + + + + +
       *
+ +252 + + + + + + +
       * <pre>
+ +253 + + + + + + +
       * downloadTrustRoot(
+ +254 + + + + + + +
       *   new URL("https://secure.globalsign.com/cacert/root-r3.crt"),
+ +255 + + + + + + +
       *   Collections.singleton(ByteArray.fromHex("cbb522d7b7f127ad6a0113865bdf1cd4102e7d0759af635a7cf4720dc963c53b"))
+ +256 + + + + + + +
       * )
+ +257 + + + + + + +
       * </pre>
+ +258 + + + + + + +
       *
+ +259 + + + + + + +
       * This is the current FIDO Metadata Service trust root certificate at the time of this
+ +260 + + + + + + +
       * library release.
+ +261 + + + + + + +
       *
+ +262 + + + + + + +
       * @see #downloadTrustRoot(URL, Set)
+ +263 + + + + + + +
       */
+ +264 + + + + + + +
      public Step3 useDefaultTrustRoot() {
+ +265 + + + + + + +
        try {
+ +266 + + +1 + +1. useDefaultTrustRoot : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::useDefaultTrustRoot → NO_COVERAGE
+ +
+
+
          return downloadTrustRoot(
+ +267 + + + + + + +
              new URL("https://secure.globalsign.com/cacert/root-r3.crt"),
+ +268 + + + + + + +
              Collections.singleton(
+ +269 + + + + + + +
                  ByteArray.fromHex(
+ +270 + + + + + + +
                      "cbb522d7b7f127ad6a0113865bdf1cd4102e7d0759af635a7cf4720dc963c53b")));
+ +271 + + + + + + +
        } catch (MalformedURLException e) {
+ +272 + + + + + + +
          throw new RuntimeException(
+ +273 + + + + + + +
              "Bad hard-coded trust root certificate URL. Please file a bug report.", e);
+ +274 + + + + + + +
        } catch (HexException e) {
+ +275 + + + + + + +
          throw new RuntimeException(
+ +276 + + + + + + +
              "Bad hard-coded trust root certificate hash. Please file a bug report.", e);
+ +277 + + + + + + +
        }
+ +278 + + + + + + +
      }
+ +279 + + + + + + +
+ +280 + + + + + + +
      /**
+ +281 + + + + + + +
       * Download the trust root certificate from the given HTTPS <code>url</code> and verify its
+ +282 + + + + + + +
       * SHA-256 hash against <code>acceptedCertSha256</code>.
+ +283 + + + + + + +
       *
+ +284 + + + + + + +
       * <p>The certificate will be downloaded if it does not exist in the cache, or if the cached
+ +285 + + + + + + +
       * certificate is not currently valid.
+ +286 + + + + + + +
       *
+ +287 + + + + + + +
       * <p>If the cert is downloaded, it is also written to the cache {@link File} or {@link
+ +288 + + + + + + +
       * Consumer} configured in the {@link Step3 next step}.
+ +289 + + + + + + +
       *
+ +290 + + + + + + +
       * @param url the HTTP URL to download. It MUST use the <code>https:</code> scheme.
+ +291 + + + + + + +
       * @param acceptedCertSha256 a set of SHA-256 hashes to verify the downloaded certificate
+ +292 + + + + + + +
       *     against. The downloaded certificate MUST match at least one of these hashes.
+ +293 + + + + + + +
       * @throws IllegalArgumentException if <code>url</code> is not a HTTPS URL.
+ +294 + + + + + + +
       */
+ +295 + + +2 + +1. downloadTrustRoot : negated conditional → KILLED
+2. downloadTrustRoot : negated conditional → KILLED
+ +
+
+
      public Step3 downloadTrustRoot(@NonNull URL url, @NonNull Set<ByteArray> acceptedCertSha256) {
+ +296 + + +1 + +1. downloadTrustRoot : negated conditional → KILLED
+ +
+
+
        if (!"https".equals(url.getProtocol())) {
+ +297 + + + + + + +
          throw new IllegalArgumentException("Trust certificate download URL must be a HTTPS URL.");
+ +298 + + + + + + +
        }
+ +299 + + +1 + +1. downloadTrustRoot : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::downloadTrustRoot → KILLED
+ +
+
+
        return new Step3(this, null, url, acceptedCertSha256);
+ +300 + + + + + + +
      }
+ +301 + + + + + + +
+ +302 + + + + + + +
      /**
+ +303 + + + + + + +
       * Use the given trust root certificate. It is the caller's responsibility to perform any
+ +304 + + + + + + +
       * integrity checks and/or caching logic.
+ +305 + + + + + + +
       *
+ +306 + + + + + + +
       * @param trustRootCertificate the certificate to use as the FIDO Metadata Service trust root.
+ +307 + + + + + + +
       */
+ +308 + + +1 + +1. useTrustRoot : negated conditional → KILLED
+ +
+
+
      public Step4 useTrustRoot(@NonNull X509Certificate trustRootCertificate) {
+ +309 + + +1 + +1. useTrustRoot : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::useTrustRoot → KILLED
+ +
+
+
        return new Step4(new Step3(this, trustRootCertificate, null, null), null, null, null);
+ +310 + + + + + + +
      }
+ +311 + + + + + + +
    }
+ +312 + + + + + + +
+ +313 + + + + + + +
    /**
+ +314 + + + + + + +
     * Step 3: Configure how to cache the trust root certificate.
+ +315 + + + + + + +
     *
+ +316 + + + + + + +
     * <p>This step offers two mutually exclusive options:
+ +317 + + + + + + +
     *
+ +318 + + + + + + +
     * <ol>
+ +319 + + + + + + +
     *   <li>Cache the trust root certificate in a {@link File}. See {@link
+ +320 + + + + + + +
     *       Step3#useTrustRootCacheFile(File)}.
+ +321 + + + + + + +
     *   <li>Cache the trust root certificate using a {@link Supplier} to read the cache and a
+ +322 + + + + + + +
     *       {@link Consumer} to write the cache. See {@link Step3#useTrustRootCache(Supplier,
+ +323 + + + + + + +
     *       Consumer)}.
+ +324 + + + + + + +
     * </ol>
+ +325 + + + + + + +
     */
+ +326 + + + + + + +
    @AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +327 + + + + + + +
    public static class Step3 {
+ +328 + + + + + + +
      @NonNull private final Step2 step2;
+ +329 + + + + + + +
      private final X509Certificate trustRootCertificate;
+ +330 + + + + + + +
      private final URL trustRootUrl;
+ +331 + + + + + + +
      private final Set<ByteArray> trustRootSha256;
+ +332 + + + + + + +
+ +333 + + + + + + +
      /**
+ +334 + + + + + + +
       * Cache the trust root certificate in the file <code>cacheFile</code>.
+ +335 + + + + + + +
       *
+ +336 + + + + + + +
       * <p>If <code>cacheFile</code> exists, is a normal file, is readable, matches one of the
+ +337 + + + + + + +
       * SHA-256 hashes configured in the previous step, and contains a currently valid X.509
+ +338 + + + + + + +
       * certificate, then it will be used as the trust root for the FIDO Metadata Service blob.
+ +339 + + + + + + +
       *
+ +340 + + + + + + +
       * <p>Otherwise, the trust root certificate will be downloaded and written to this file.
+ +341 + + + + + + +
       */
+ +342 + + +1 + +1. useTrustRootCacheFile : negated conditional → KILLED
+ +
+
+
      public Step4 useTrustRootCacheFile(@NonNull File cacheFile) {
+ +343 + + +1 + +1. useTrustRootCacheFile : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3::useTrustRootCacheFile → KILLED
+ +
+
+
        return new Step4(this, cacheFile, null, null);
+ +344 + + + + + + +
      }
+ +345 + + + + + + +
+ +346 + + + + + + +
      /**
+ +347 + + + + + + +
       * Cache the trust root certificate using a {@link Supplier} to read the cache, and using a
+ +348 + + + + + + +
       * {@link Consumer} to write the cache.
+ +349 + + + + + + +
       *
+ +350 + + + + + + +
       * <p>If <code>getCachedTrustRootCert</code> returns non-empty, the value matches one of the
+ +351 + + + + + + +
       * SHA-256 hashes configured in the previous step, and is a currently valid X.509 certificate,
+ +352 + + + + + + +
       * then it will be used as the trust root for the FIDO Metadata Service blob.
+ +353 + + + + + + +
       *
+ +354 + + + + + + +
       * <p>Otherwise, the trust root certificate will be downloaded and written to <code>
+ +355 + + + + + + +
       * writeCachedTrustRootCert</code>.
+ +356 + + + + + + +
       *
+ +357 + + + + + + +
       * @param getCachedTrustRootCert a {@link Supplier} that fetches the cached trust root
+ +358 + + + + + + +
       *     certificate if it exists. MUST NOT return <code>null</code>. The returned value, if
+ +359 + + + + + + +
       *     present, MUST be the trust root certificate in X.509 DER format.
+ +360 + + + + + + +
       * @param writeCachedTrustRootCert a {@link Consumer} that accepts the trust root certificate
+ +361 + + + + + + +
       *     in X.509 DER format and writes it to the cache. Its argument will never be <code>null
+ +362 + + + + + + +
       *     </code>.
+ +363 + + + + + + +
       */
+ +364 + + + + + + +
      public Step4 useTrustRootCache(
+ +365 + + +1 + +1. useTrustRootCache : negated conditional → KILLED
+ +
+
+
          @NonNull Supplier<Optional<ByteArray>> getCachedTrustRootCert,
+ +366 + + +1 + +1. useTrustRootCache : negated conditional → KILLED
+ +
+
+
          @NonNull Consumer<ByteArray> writeCachedTrustRootCert) {
+ +367 + + +1 + +1. useTrustRootCache : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3::useTrustRootCache → KILLED
+ +
+
+
        return new Step4(this, null, getCachedTrustRootCert, writeCachedTrustRootCert);
+ +368 + + + + + + +
      }
+ +369 + + + + + + +
    }
+ +370 + + + + + + +
+ +371 + + + + + + +
    /**
+ +372 + + + + + + +
     * Step 4: Configure how to fetch the FIDO Metadata Service metadata BLOB.
+ +373 + + + + + + +
     *
+ +374 + + + + + + +
     * <p>This step offers three mutually exclusive options:
+ +375 + + + + + + +
     *
+ +376 + + + + + + +
     * <ol>
+ +377 + + + + + + +
     *   <li>Use the default download URL. This is the main intended use case. See {@link
+ +378 + + + + + + +
     *       #useDefaultBlob()}.
+ +379 + + + + + + +
     *   <li>Use a custom download URL. This is for future-proofing in case the BLOB download URL
+ +380 + + + + + + +
     *       changes and there is no new release of this library. See {@link #downloadBlob(URL)}.
+ +381 + + + + + + +
     *   <li>Use a pre-retrieved BLOB. The signature will still be verified, but it is up to you to
+ +382 + + + + + + +
     *       renew it when appropriate and perform any caching as desired. See {@link
+ +383 + + + + + + +
     *       #useBlob(String)}.
+ +384 + + + + + + +
     * </ol>
+ +385 + + + + + + +
     */
+ +386 + + + + + + +
    @AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +387 + + + + + + +
    public static class Step4 {
+ +388 + + + + + + +
      @NonNull private final Step3 step3;
+ +389 + + + + + + +
      private final File trustRootCacheFile;
+ +390 + + + + + + +
      private final Supplier<Optional<ByteArray>> trustRootCacheSupplier;
+ +391 + + + + + + +
      private final Consumer<ByteArray> trustRootCacheConsumer;
+ +392 + + + + + + +
+ +393 + + + + + + +
      /**
+ +394 + + + + + + +
       * Download the metadata BLOB from a hard-coded URL.
+ +395 + + + + + + +
       *
+ +396 + + + + + + +
       * <p>This is an alias of <code>downloadBlob(new URL("https://mds.fidoalliance.org/"))</code>.
+ +397 + + + + + + +
       *
+ +398 + + + + + + +
       * <p>This is the current FIDO Metadata Service BLOB download URL at the time of this library
+ +399 + + + + + + +
       * release.
+ +400 + + + + + + +
       *
+ +401 + + + + + + +
       * @see #downloadBlob(URL)
+ +402 + + + + + + +
       */
+ +403 + + + + + + +
      public Step5 useDefaultBlob() {
+ +404 + + + + + + +
        try {
+ +405 + + +1 + +1. useDefaultBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::useDefaultBlob → NO_COVERAGE
+ +
+
+
          return downloadBlob(new URL("https://mds.fidoalliance.org/"));
+ +406 + + + + + + +
        } catch (MalformedURLException e) {
+ +407 + + + + + + +
          throw new RuntimeException(
+ +408 + + + + + + +
              "Bad hard-coded trust root certificate URL. Please file a bug report.", e);
+ +409 + + + + + + +
        }
+ +410 + + + + + + +
      }
+ +411 + + + + + + +
+ +412 + + + + + + +
      /**
+ +413 + + + + + + +
       * Download the metadata BLOB from the given HTTPS <code>url</code>.
+ +414 + + + + + + +
       *
+ +415 + + + + + + +
       * <p>The BLOB will be downloaded if it does not exist in the cache, or if the <code>
+ +416 + + + + + + +
       * nextUpdate</code> property of the cached BLOB is the current date or earlier.
+ +417 + + + + + + +
       *
+ +418 + + + + + + +
       * <p>If the BLOB is downloaded, it is also written to the cache {@link File} or {@link
+ +419 + + + + + + +
       * Consumer} configured in the next step.
+ +420 + + + + + + +
       *
+ +421 + + + + + + +
       * @param url the HTTP URL to download. It MUST use the <code>https:</code> scheme.
+ +422 + + + + + + +
       */
+ +423 + + +1 + +1. downloadBlob : negated conditional → KILLED
+ +
+
+
      public Step5 downloadBlob(@NonNull URL url) {
+ +424 + + +1 + +1. downloadBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::downloadBlob → KILLED
+ +
+
+
        return new Step5(this, null, url);
+ +425 + + + + + + +
      }
+ +426 + + + + + + +
+ +427 + + + + + + +
      /**
+ +428 + + + + + + +
       * Use the given metadata BLOB; never download it.
+ +429 + + + + + + +
       *
+ +430 + + + + + + +
       * <p>The blob signature and trust chain will still be verified, but it is the caller's
+ +431 + + + + + + +
       * responsibility to renew the metadata BLOB according to the <a
+ +432 + + + + + + +
       * href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-object-processing-rules">FIDO
+ +433 + + + + + + +
       * Metadata Service specification</a>.
+ +434 + + + + + + +
       *
+ +435 + + + + + + +
       * @param blobJwt the Metadata BLOB in JWT format as defined in <a
+ +436 + + + + + + +
       *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob">FIDO
+ +437 + + + + + + +
       *     Metadata Service §3.1.7. Metadata BLOB</a>. The byte array MUST NOT be Base64-decoded.
+ +438 + + + + + + +
       * @see <a
+ +439 + + + + + + +
       *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob">FIDO
+ +440 + + + + + + +
       *     Metadata Service §3.1.7. Metadata BLOB</a>
+ +441 + + + + + + +
       * @see <a
+ +442 + + + + + + +
       *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-object-processing-rules">FIDO
+ +443 + + + + + + +
       *     Metadata Service §3.2. Metadata BLOB object processing rules</a>
+ +444 + + + + + + +
       */
+ +445 + + +1 + +1. useBlob : negated conditional → KILLED
+ +
+
+
      public FidoMetadataDownloaderBuilder useBlob(@NonNull String blobJwt) {
+ +446 + + +1 + +1. useBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::useBlob → KILLED
+ +
+
+
        return finishRequiredSteps(new Step5(this, blobJwt, null), null, null, null);
+ +447 + + + + + + +
      }
+ +448 + + + + + + +
    }
+ +449 + + + + + + +
+ +450 + + + + + + +
    /**
+ +451 + + + + + + +
     * Step 5: Configure how to cache the metadata BLOB.
+ +452 + + + + + + +
     *
+ +453 + + + + + + +
     * <p>This step offers two mutually exclusive options:
+ +454 + + + + + + +
     *
+ +455 + + + + + + +
     * <ol>
+ +456 + + + + + + +
     *   <li>Cache the metadata BLOB in a {@link File}. See {@link Step5#useBlobCacheFile(File)}.
+ +457 + + + + + + +
     *   <li>Cache the metadata BLOB using a {@link Supplier} to read the cache and a {@link
+ +458 + + + + + + +
     *       Consumer} to write the cache. See {@link Step5#useBlobCache(Supplier, Consumer)}.
+ +459 + + + + + + +
     * </ol>
+ +460 + + + + + + +
     */
+ +461 + + + + + + +
    @AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +462 + + + + + + +
    public static class Step5 {
+ +463 + + + + + + +
      @NonNull private final Step4 step4;
+ +464 + + + + + + +
      private final String blobJwt;
+ +465 + + + + + + +
      private final URL blobUrl;
+ +466 + + + + + + +
+ +467 + + + + + + +
      /**
+ +468 + + + + + + +
       * Cache metadata BLOB in the file <code>cacheFile</code>.
+ +469 + + + + + + +
       *
+ +470 + + + + + + +
       * <p>If <code>cacheFile</code> exists, is a normal file, is readable, and is not out of date,
+ +471 + + + + + + +
       * then it will be used as the FIDO Metadata Service BLOB.
+ +472 + + + + + + +
       *
+ +473 + + + + + + +
       * <p>Otherwise, the metadata BLOB will be downloaded and written to this file.
+ +474 + + + + + + +
       *
+ +475 + + + + + + +
       * @param cacheFile a {@link File} which may or may not exist. If it exists, it MUST contain
+ +476 + + + + + + +
       *     the metadata BLOB in JWS compact serialization format <a
+ +477 + + + + + + +
       *     href="https://datatracker.ietf.org/doc/html/rfc7515#section-3.1">[RFC7515]</a>.
+ +478 + + + + + + +
       */
+ +479 + + +1 + +1. useBlobCacheFile : negated conditional → KILLED
+ +
+
+
      public FidoMetadataDownloaderBuilder useBlobCacheFile(@NonNull File cacheFile) {
+ +480 + + +1 + +1. useBlobCacheFile : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5::useBlobCacheFile → KILLED
+ +
+
+
        return finishRequiredSteps(this, cacheFile, null, null);
+ +481 + + + + + + +
      }
+ +482 + + + + + + +
+ +483 + + + + + + +
      /**
+ +484 + + + + + + +
       * Cache the metadata BLOB using a {@link Supplier} to read the cache, and using a {@link
+ +485 + + + + + + +
       * Consumer} to write the cache.
+ +486 + + + + + + +
       *
+ +487 + + + + + + +
       * <p>If <code>getCachedBlob</code> returns non-empty and the content is not out of date, then
+ +488 + + + + + + +
       * it will be used as the FIDO Metadata Service BLOB.
+ +489 + + + + + + +
       *
+ +490 + + + + + + +
       * <p>Otherwise, the metadata BLOB will be downloaded and written to <code>writeCachedBlob
+ +491 + + + + + + +
       * </code>.
+ +492 + + + + + + +
       *
+ +493 + + + + + + +
       * @param getCachedBlob a {@link Supplier} that fetches the cached metadata BLOB if it exists.
+ +494 + + + + + + +
       *     MUST NOT return <code>null</code>. The returned value, if present, MUST be in JWS
+ +495 + + + + + + +
       *     compact serialization format <a
+ +496 + + + + + + +
       *     href="https://datatracker.ietf.org/doc/html/rfc7515#section-3.1">[RFC7515]</a>.
+ +497 + + + + + + +
       * @param writeCachedBlob a {@link Consumer} that accepts the metadata BLOB in JWS compact
+ +498 + + + + + + +
       *     serialization format <a
+ +499 + + + + + + +
       *     href="https://datatracker.ietf.org/doc/html/rfc7515#section-3.1">[RFC7515]</a> and
+ +500 + + + + + + +
       *     writes it to the cache. Its argument will never be <code>null</code>.
+ +501 + + + + + + +
       */
+ +502 + + + + + + +
      public FidoMetadataDownloaderBuilder useBlobCache(
+ +503 + + +1 + +1. useBlobCache : negated conditional → KILLED
+ +
+
+
          @NonNull Supplier<Optional<ByteArray>> getCachedBlob,
+ +504 + + +1 + +1. useBlobCache : negated conditional → KILLED
+ +
+
+
          @NonNull Consumer<ByteArray> writeCachedBlob) {
+ +505 + + +1 + +1. useBlobCache : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5::useBlobCache → KILLED
+ +
+
+
        return finishRequiredSteps(this, null, getCachedBlob, writeCachedBlob);
+ +506 + + + + + + +
      }
+ +507 + + + + + + +
    }
+ +508 + + + + + + +
+ +509 + + + + + + +
    private static FidoMetadataDownloaderBuilder finishRequiredSteps(
+ +510 + + + + + + +
        FidoMetadataDownloaderBuilder.Step5 step5,
+ +511 + + + + + + +
        File blobCacheFile,
+ +512 + + + + + + +
        Supplier<Optional<ByteArray>> blobCacheSupplier,
+ +513 + + + + + + +
        Consumer<ByteArray> blobCacheConsumer) {
+ +514 + + +1 + +1. finishRequiredSteps : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::finishRequiredSteps → KILLED
+ +
+
+
      return new FidoMetadataDownloaderBuilder(
+ +515 + + + + + + +
          step5.step4.step3.step2.expectedLegalHeaders,
+ +516 + + + + + + +
          step5.step4.step3.trustRootCertificate,
+ +517 + + + + + + +
          step5.step4.step3.trustRootUrl,
+ +518 + + + + + + +
          step5.step4.step3.trustRootSha256,
+ +519 + + + + + + +
          step5.step4.trustRootCacheFile,
+ +520 + + + + + + +
          step5.step4.trustRootCacheSupplier,
+ +521 + + + + + + +
          step5.step4.trustRootCacheConsumer,
+ +522 + + + + + + +
          step5.blobJwt,
+ +523 + + + + + + +
          step5.blobUrl,
+ +524 + + + + + + +
          blobCacheFile,
+ +525 + + + + + + +
          blobCacheSupplier,
+ +526 + + + + + + +
          blobCacheConsumer);
+ +527 + + + + + + +
    }
+ +528 + + + + + + +
+ +529 + + + + + + +
    /**
+ +530 + + + + + + +
     * Use <code>clock</code> as the source of the current time for some application-level logic.
+ +531 + + + + + + +
     *
+ +532 + + + + + + +
     * <p>This is primarily intended for testing.
+ +533 + + + + + + +
     *
+ +534 + + + + + + +
     * <p>The default is {@link Clock#systemUTC()}.
+ +535 + + + + + + +
     *
+ +536 + + + + + + +
     * @param clock a {@link Clock} which the finished {@link FidoMetadataDownloader} will use to
+ +537 + + + + + + +
     *     tell the time.
+ +538 + + + + + + +
     */
+ +539 + + +1 + +1. clock : negated conditional → KILLED
+ +
+
+
    public FidoMetadataDownloaderBuilder clock(@NonNull Clock clock) {
+ +540 + + + + + + +
      this.clock = clock;
+ +541 + + +1 + +1. clock : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::clock → KILLED
+ +
+
+
      return this;
+ +542 + + + + + + +
    }
+ +543 + + + + + + +
+ +544 + + + + + + +
    /**
+ +545 + + + + + + +
     * Use the provided CRLs.
+ +546 + + + + + + +
     *
+ +547 + + + + + + +
     * <p>CRLs will also be downloaded from distribution points if the <code>
+ +548 + + + + + + +
     * com.sun.security.enableCRLDP</code> system property is set to <code>true</code> (assuming the
+ +549 + + + + + + +
     * use of the {@link CertPathValidator} implementation from the SUN provider).
+ +550 + + + + + + +
     *
+ +551 + + + + + + +
     * @throws InvalidAlgorithmParameterException if {@link CertStore#getInstance(String,
+ +552 + + + + + + +
     *     CertStoreParameters)} does.
+ +553 + + + + + + +
     * @throws NoSuchAlgorithmException if a <code>"Collection"</code> type {@link CertStore}
+ +554 + + + + + + +
     *     provider is not available.
+ +555 + + + + + + +
     * @see #useCrls(CertStore)
+ +556 + + + + + + +
     */
+ +557 + + +1 + +1. useCrls : negated conditional → KILLED
+ +
+
+
    public FidoMetadataDownloaderBuilder useCrls(@NonNull Collection<CRL> crls)
+ +558 + + + + + + +
        throws InvalidAlgorithmParameterException, NoSuchAlgorithmException {
+ +559 + + +1 + +1. useCrls : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::useCrls → KILLED
+ +
+
+
      return useCrls(CertStore.getInstance("Collection", new CollectionCertStoreParameters(crls)));
+ +560 + + + + + + +
    }
+ +561 + + + + + + +
+ +562 + + + + + + +
    /**
+ +563 + + + + + + +
     * Use CRLs in the provided {@link CertStore}.
+ +564 + + + + + + +
     *
+ +565 + + + + + + +
     * <p>CRLs will also be downloaded from distribution points if the <code>
+ +566 + + + + + + +
     * com.sun.security.enableCRLDP</code> system property is set to <code>true</code> (assuming the
+ +567 + + + + + + +
     * use of the {@link CertPathValidator} implementation from the SUN provider).
+ +568 + + + + + + +
     *
+ +569 + + + + + + +
     * @see #useCrls(Collection)
+ +570 + + + + + + +
     */
+ +571 + + + + + + +
    public FidoMetadataDownloaderBuilder useCrls(CertStore certStore) {
+ +572 + + + + + + +
      this.certStore = certStore;
+ +573 + + +1 + +1. useCrls : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::useCrls → KILLED
+ +
+
+
      return this;
+ +574 + + + + + + +
    }
+ +575 + + + + + + +
+ +576 + + + + + + +
    /**
+ +577 + + + + + + +
     * Use the provided {@link X509Certificate}s as trust roots for HTTPS downloads.
+ +578 + + + + + + +
     *
+ +579 + + + + + + +
     * <p>This is primarily useful when setting {@link Step2#downloadTrustRoot(URL, Set)
+ +580 + + + + + + +
     * downloadTrustRoot} and/or {@link Step4#downloadBlob(URL) downloadBlob} to download from
+ +581 + + + + + + +
     * custom servers instead of the defaults.
+ +582 + + + + + + +
     *
+ +583 + + + + + + +
     * <p>If provided, these will be used for downloading
+ +584 + + + + + + +
     *
+ +585 + + + + + + +
     * <ul>
+ +586 + + + + + + +
     *   <li>the trust root certificate for the BLOB signature chain, and
+ +587 + + + + + + +
     *   <li>the metadata BLOB.
+ +588 + + + + + + +
     * </ul>
+ +589 + + + + + + +
     *
+ +590 + + + + + + +
     * If not set, the system default certificate store will be used.
+ +591 + + + + + + +
     */
+ +592 + + +1 + +1. trustHttpsCerts : negated conditional → KILLED
+ +
+
+
    public FidoMetadataDownloaderBuilder trustHttpsCerts(@NonNull X509Certificate... certificates) {
+ +593 + + + + + + +
      final KeyStore trustStore;
+ +594 + + + + + + +
      try {
+ +595 + + + + + + +
        trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
+ +596 + + +1 + +1. trustHttpsCerts : removed call to java/security/KeyStore::load → KILLED
+ +
+
+
        trustStore.load(null);
+ +597 + + + + + + +
      } catch (KeyStoreException
+ +598 + + + + + + +
          | IOException
+ +599 + + + + + + +
          | NoSuchAlgorithmException
+ +600 + + + + + + +
          | CertificateException e) {
+ +601 + + + + + + +
        throw new RuntimeException(
+ +602 + + + + + + +
            "Failed to instantiate or initialize KeyStore. This should not be possible, please file a bug report.",
+ +603 + + + + + + +
            e);
+ +604 + + + + + + +
      }
+ +605 + + + + + + +
      for (X509Certificate cert : certificates) {
+ +606 + + + + + + +
        try {
+ +607 + + +1 + +1. trustHttpsCerts : removed call to java/security/KeyStore::setCertificateEntry → KILLED
+ +
+
+
          trustStore.setCertificateEntry(UUID.randomUUID().toString(), cert);
+ +608 + + + + + + +
        } catch (KeyStoreException e) {
+ +609 + + + + + + +
          throw new RuntimeException(
+ +610 + + + + + + +
              "Failed to import HTTPS cert into KeyStore. This should not be possible, please file a bug report.",
+ +611 + + + + + + +
              e);
+ +612 + + + + + + +
        }
+ +613 + + + + + + +
      }
+ +614 + + + + + + +
      this.httpsTrustStore = trustStore;
+ +615 + + + + + + +
+ +616 + + +1 + +1. trustHttpsCerts : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::trustHttpsCerts → KILLED
+ +
+
+
      return this;
+ +617 + + + + + + +
    }
+ +618 + + + + + + +
+ +619 + + + + + + +
    /**
+ +620 + + + + + + +
     * If set to <code>true</code>, the BLOB signature will not be verified when loading the BLOB
+ +621 + + + + + + +
     * from cache or when explicitly set via {@link Step4#useBlob(String)}. This means that if a
+ +622 + + + + + + +
     * BLOB was successfully verified once and written to cache, that cached value will be
+ +623 + + + + + + +
     * implicitly trusted when loaded in the future.
+ +624 + + + + + + +
     *
+ +625 + + + + + + +
     * <p>If set to <code>false</code>, the BLOB signature will always be verified no matter where
+ +626 + + + + + + +
     * the BLOB came from. This means that a cached BLOB may become invalid if the BLOB certificate
+ +627 + + + + + + +
     * expires, even if the BLOB was successfully verified at the time it was downloaded.
+ +628 + + + + + + +
     *
+ +629 + + + + + + +
     * <p>The default setting is <code>false</code>.
+ +630 + + + + + + +
     *
+ +631 + + + + + + +
     * @param verifyDownloadsOnly <code>true</code> if the BLOB signature should be ignored when
+ +632 + + + + + + +
     *     loading the BLOB from cache or when explicitly set via {@link Step4#useBlob(String)}.
+ +633 + + + + + + +
     */
+ +634 + + + + + + +
    public FidoMetadataDownloaderBuilder verifyDownloadsOnly(final boolean verifyDownloadsOnly) {
+ +635 + + + + + + +
      this.verifyDownloadsOnly = verifyDownloadsOnly;
+ +636 + + +1 + +1. verifyDownloadsOnly : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::verifyDownloadsOnly → KILLED
+ +
+
+
      return this;
+ +637 + + + + + + +
    }
+ +638 + + + + + + +
  }
+ +639 + + + + + + +
+ +640 + + + + + + +
  /**
+ +641 + + + + + + +
   * Load the metadata BLOB from cache, or download a fresh one if necessary.
+ +642 + + + + + + +
   *
+ +643 + + + + + + +
   * <p>This method is NOT THREAD SAFE since it reads and writes caches.
+ +644 + + + + + + +
   *
+ +645 + + + + + + +
   * <p>On each execution this will, in order:
+ +646 + + + + + + +
   *
+ +647 + + + + + + +
   * <ol>
+ +648 + + + + + + +
   *   <li>Download the trust root certificate, if necessary: if the cache is empty, the cache fails
+ +649 + + + + + + +
   *       to load, or the cached cert is not valid at the current time (as determined by the {@link
+ +650 + + + + + + +
   *       FidoMetadataDownloaderBuilder#clock(Clock) clock} setting).
+ +651 + + + + + + +
   *   <li>If downloaded, cache the trust root certificate using the configured {@link File} or
+ +652 + + + + + + +
   *       {@link Consumer} (see {@link FidoMetadataDownloaderBuilder.Step3})
+ +653 + + + + + + +
   *   <li>Download the metadata BLOB, if necessary: if the cache is empty, the cache fails to load,
+ +654 + + + + + + +
   *       or the <code>"nextUpdate"</code> property in the cached BLOB is the current date (as
+ +655 + + + + + + +
   *       determined by the {@link FidoMetadataDownloaderBuilder#clock(Clock) clock} setting) or
+ +656 + + + + + + +
   *       earlier.
+ +657 + + + + + + +
   *   <li>Check the <code>"no"</code> property of the downloaded BLOB, if any, and compare it with
+ +658 + + + + + + +
   *       the <code>"no"</code> of the cached BLOB, if any. The one with a greater <code>"no"
+ +659 + + + + + + +
   *       </code> overrides the other, even if its <code>"nextUpdate"</code> is in the past.
+ +660 + + + + + + +
   *   <li>If a BLOB with a newer <code>"no"</code> was downloaded, verify that the value of its
+ +661 + + + + + + +
   *       <code>"legalHeader"</code> appears in the configured {@link
+ +662 + + + + + + +
   *       FidoMetadataDownloaderBuilder.Step1#expectLegalHeader(String...) expectLegalHeader}
+ +663 + + + + + + +
   *       setting. If not, throw an {@link UnexpectedLegalHeader} exception containing the cached
+ +664 + + + + + + +
   *       BLOB, if any, and the downloaded BLOB.
+ +665 + + + + + + +
   *   <li>If a BLOB with a newer <code>"no"</code> was downloaded and had an expected <code>
+ +666 + + + + + + +
   *       "legalHeader"</code>, cache the new BLOB using the configured {@link File} or {@link
+ +667 + + + + + + +
   *       Consumer} (see {@link FidoMetadataDownloaderBuilder.Step5}).
+ +668 + + + + + + +
   * </ol>
+ +669 + + + + + + +
   *
+ +670 + + + + + + +
   * No internal mutable state is maintained between invocations of this method; each invocation
+ +671 + + + + + + +
   * will reload/rewrite caches, perform downloads and check the <code>"legalHeader"
+ +672 + + + + + + +
   * </code> as necessary. You may therefore reuse a {@link FidoMetadataDownloader} instance and,
+ +673 + + + + + + +
   * for example, call this method periodically to refresh the BLOB when appropriate. Each call will
+ +674 + + + + + + +
   * return a new {@link MetadataBLOB} instance; ones already returned will not be updated by
+ +675 + + + + + + +
   * subsequent calls.
+ +676 + + + + + + +
   *
+ +677 + + + + + + +
   * @return the successfully retrieved and validated metadata BLOB.
+ +678 + + + + + + +
   * @throws Base64UrlException if the explicitly configured or newly downloaded BLOB is not a
+ +679 + + + + + + +
   *     well-formed JWT in compact serialization.
+ +680 + + + + + + +
   * @throws CertPathValidatorException if the explicitly configured or newly downloaded BLOB fails
+ +681 + + + + + + +
   *     certificate path validation.
+ +682 + + + + + + +
   * @throws CertificateException if the trust root certificate was downloaded and passed the
+ +683 + + + + + + +
   *     SHA-256 integrity check, but does not contain a currently valid X.509 DER certificate; or
+ +684 + + + + + + +
   *     if the BLOB signing certificate chain fails to parse.
+ +685 + + + + + + +
   * @throws DigestException if the trust root certificate was downloaded but failed the SHA-256
+ +686 + + + + + + +
   *     integrity check.
+ +687 + + + + + + +
   * @throws FidoMetadataDownloaderException if the explicitly configured or newly downloaded BLOB
+ +688 + + + + + + +
   *     (if any) has a bad signature and there is no cached BLOB to fall back to.
+ +689 + + + + + + +
   * @throws IOException if any of the following fails: downloading the trust root certificate,
+ +690 + + + + + + +
   *     downloading the BLOB, reading or writing any cache file (if any), or parsing the BLOB
+ +691 + + + + + + +
   *     contents.
+ +692 + + + + + + +
   * @throws InvalidAlgorithmParameterException if certificate path validation fails.
+ +693 + + + + + + +
   * @throws InvalidKeyException if signature verification fails.
+ +694 + + + + + + +
   * @throws NoSuchAlgorithmException if signature verification fails, or if the SHA-256 algorithm
+ +695 + + + + + + +
   *     is not available.
+ +696 + + + + + + +
   * @throws SignatureException if signature verification fails.
+ +697 + + + + + + +
   * @throws UnexpectedLegalHeader if the downloaded BLOB (if any) contains a <code>"legalHeader"
+ +698 + + + + + + +
   *     </code> value not configured in {@link
+ +699 + + + + + + +
   *     FidoMetadataDownloaderBuilder.Step1#expectLegalHeader(String...)
+ +700 + + + + + + +
   *     expectLegalHeader(String...)} but is otherwise valid. The downloaded BLOB will not be
+ +701 + + + + + + +
   *     written to cache in this case.
+ +702 + + + + + + +
   */
+ +703 + + + + + + +
  public MetadataBLOB loadCachedBlob()
+ +704 + + + + + + +
      throws CertPathValidatorException,
+ +705 + + + + + + +
          InvalidAlgorithmParameterException,
+ +706 + + + + + + +
          Base64UrlException,
+ +707 + + + + + + +
          CertificateException,
+ +708 + + + + + + +
          IOException,
+ +709 + + + + + + +
          NoSuchAlgorithmException,
+ +710 + + + + + + +
          SignatureException,
+ +711 + + + + + + +
          InvalidKeyException,
+ +712 + + + + + + +
          UnexpectedLegalHeader,
+ +713 + + + + + + +
          DigestException,
+ +714 + + + + + + +
          FidoMetadataDownloaderException {
+ +715 + + + + + + +
    final X509Certificate trustRoot = retrieveTrustRootCert();
+ +716 + + + + + + +
+ +717 + + + + + + +
    final Optional<MetadataBLOB> explicit = loadExplicitBlobOnly(trustRoot);
+ +718 + + +1 + +1. loadCachedBlob : negated conditional → KILLED
+ +
+
+
    if (explicit.isPresent()) {
+ +719 + + + + + + +
      log.debug("Explicit BLOB is set - disregarding cache and download.");
+ +720 + + +1 + +1. loadCachedBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob → KILLED
+ +
+
+
      return explicit.get();
+ +721 + + + + + + +
    }
+ +722 + + + + + + +
+ +723 + + + + + + +
    final Optional<MetadataBLOB> cached = loadCachedBlobOnly(trustRoot);
+ +724 + + +1 + +1. loadCachedBlob : negated conditional → MEMORY_ERROR
+ +
+
+
    if (cached.isPresent()) {
+ +725 + + + + + + +
      log.debug("Cached BLOB exists, checking expiry date...");
+ +726 + + + + + + +
      if (cached
+ +727 + + + + + + +
          .get()
+ +728 + + + + + + +
          .getPayload()
+ +729 + + + + + + +
          .getNextUpdate()
+ +730 + + + + + + +
          .atStartOfDay()
+ +731 + + + + + + +
          .atZone(clock.getZone())
+ +732 + + +1 + +1. loadCachedBlob : negated conditional → KILLED
+ +
+
+
          .isAfter(clock.instant().atZone(clock.getZone()))) {
+ +733 + + + + + + +
        log.debug("Cached BLOB has not yet expired - using cached BLOB.");
+ +734 + + +1 + +1. loadCachedBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob → KILLED
+ +
+
+
        return cached.get();
+ +735 + + + + + + +
      } else {
+ +736 + + + + + + +
        log.debug("Cached BLOB has expired.");
+ +737 + + + + + + +
      }
+ +738 + + + + + + +
+ +739 + + + + + + +
    } else {
+ +740 + + + + + + +
      log.debug("Cached BLOB does not exist or is invalid.");
+ +741 + + + + + + +
    }
+ +742 + + + + + + +
+ +743 + + +1 + +1. loadCachedBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob → KILLED
+ +
+
+
    return refreshBlobInternal(trustRoot, cached).get();
+ +744 + + + + + + +
  }
+ +745 + + + + + + +
+ +746 + + + + + + +
  /**
+ +747 + + + + + + +
   * Download and cache a fresh metadata BLOB, or read it from cache if the downloaded BLOB is not
+ +748 + + + + + + +
   * up to date.
+ +749 + + + + + + +
   *
+ +750 + + + + + + +
   * <p>This method is NOT THREAD SAFE since it reads and writes caches.
+ +751 + + + + + + +
   *
+ +752 + + + + + + +
   * <p>On each execution this will, in order:
+ +753 + + + + + + +
   *
+ +754 + + + + + + +
   * <ol>
+ +755 + + + + + + +
   *   <li>Download the trust root certificate, if necessary: if the cache is empty, the cache fails
+ +756 + + + + + + +
   *       to load, or the cached cert is not valid at the current time (as determined by the {@link
+ +757 + + + + + + +
   *       FidoMetadataDownloaderBuilder#clock(Clock) clock} setting).
+ +758 + + + + + + +
   *   <li>If downloaded, cache the trust root certificate using the configured {@link File} or
+ +759 + + + + + + +
   *       {@link Consumer} (see {@link FidoMetadataDownloaderBuilder.Step3})
+ +760 + + + + + + +
   *   <li>Download the metadata BLOB.
+ +761 + + + + + + +
   *   <li>Check the <code>"no"</code> property of the downloaded BLOB and compare it with the
+ +762 + + + + + + +
   *       <code>"no"</code> of the cached BLOB, if any. The one with a greater <code>"no"
+ +763 + + + + + + +
   *       </code> overrides the other, even if its <code>"nextUpdate"</code> is in the past.
+ +764 + + + + + + +
   *   <li>If the downloaded BLOB has a newer <code>"no"</code>, or if no BLOB was cached, verify
+ +765 + + + + + + +
   *       that the value of the downloaded BLOB's <code>"legalHeader"</code> appears in the
+ +766 + + + + + + +
   *       configured {@link FidoMetadataDownloaderBuilder.Step1#expectLegalHeader(String...)
+ +767 + + + + + + +
   *       expectLegalHeader} setting. If not, throw an {@link UnexpectedLegalHeader} exception
+ +768 + + + + + + +
   *       containing the cached BLOB, if any, and the downloaded BLOB.
+ +769 + + + + + + +
   *   <li>If the downloaded BLOB has an expected <code>
+ +770 + + + + + + +
   *       "legalHeader"</code>, cache it using the configured {@link File} or {@link Consumer} (see
+ +771 + + + + + + +
   *       {@link FidoMetadataDownloaderBuilder.Step5}).
+ +772 + + + + + + +
   * </ol>
+ +773 + + + + + + +
   *
+ +774 + + + + + + +
   * No internal mutable state is maintained between invocations of this method; each invocation
+ +775 + + + + + + +
   * will reload/rewrite caches, perform downloads and check the <code>"legalHeader"
+ +776 + + + + + + +
   * </code> as necessary. You may therefore reuse a {@link FidoMetadataDownloader} instance and,
+ +777 + + + + + + +
   * for example, call this method periodically to refresh the BLOB. Each call will return a new
+ +778 + + + + + + +
   * {@link MetadataBLOB} instance; ones already returned will not be updated by subsequent calls.
+ +779 + + + + + + +
   *
+ +780 + + + + + + +
   * @return the successfully retrieved and validated metadata BLOB.
+ +781 + + + + + + +
   * @throws Base64UrlException if the explicitly configured or newly downloaded BLOB is not a
+ +782 + + + + + + +
   *     well-formed JWT in compact serialization.
+ +783 + + + + + + +
   * @throws CertPathValidatorException if the explicitly configured or newly downloaded BLOB fails
+ +784 + + + + + + +
   *     certificate path validation.
+ +785 + + + + + + +
   * @throws CertificateException if the trust root certificate was downloaded and passed the
+ +786 + + + + + + +
   *     SHA-256 integrity check, but does not contain a currently valid X.509 DER certificate; or
+ +787 + + + + + + +
   *     if the BLOB signing certificate chain fails to parse.
+ +788 + + + + + + +
   * @throws DigestException if the trust root certificate was downloaded but failed the SHA-256
+ +789 + + + + + + +
   *     integrity check.
+ +790 + + + + + + +
   * @throws FidoMetadataDownloaderException if the explicitly configured or newly downloaded BLOB
+ +791 + + + + + + +
   *     (if any) has a bad signature and there is no cached BLOB to fall back to.
+ +792 + + + + + + +
   * @throws IOException if any of the following fails: downloading the trust root certificate,
+ +793 + + + + + + +
   *     downloading the BLOB, reading or writing any cache file (if any), or parsing the BLOB
+ +794 + + + + + + +
   *     contents.
+ +795 + + + + + + +
   * @throws InvalidAlgorithmParameterException if certificate path validation fails.
+ +796 + + + + + + +
   * @throws InvalidKeyException if signature verification fails.
+ +797 + + + + + + +
   * @throws NoSuchAlgorithmException if signature verification fails, or if the SHA-256 algorithm
+ +798 + + + + + + +
   *     is not available.
+ +799 + + + + + + +
   * @throws SignatureException if signature verification fails.
+ +800 + + + + + + +
   * @throws UnexpectedLegalHeader if the downloaded BLOB (if any) contains a <code>"legalHeader"
+ +801 + + + + + + +
   *     </code> value not configured in {@link
+ +802 + + + + + + +
   *     FidoMetadataDownloaderBuilder.Step1#expectLegalHeader(String...)
+ +803 + + + + + + +
   *     expectLegalHeader(String...)} but is otherwise valid. The downloaded BLOB will not be
+ +804 + + + + + + +
   *     written to cache in this case.
+ +805 + + + + + + +
   */
+ +806 + + + + + + +
  public MetadataBLOB refreshBlob()
+ +807 + + + + + + +
      throws CertPathValidatorException,
+ +808 + + + + + + +
          InvalidAlgorithmParameterException,
+ +809 + + + + + + +
          Base64UrlException,
+ +810 + + + + + + +
          CertificateException,
+ +811 + + + + + + +
          IOException,
+ +812 + + + + + + +
          NoSuchAlgorithmException,
+ +813 + + + + + + +
          SignatureException,
+ +814 + + + + + + +
          InvalidKeyException,
+ +815 + + + + + + +
          UnexpectedLegalHeader,
+ +816 + + + + + + +
          DigestException,
+ +817 + + + + + + +
          FidoMetadataDownloaderException {
+ +818 + + + + + + +
    final X509Certificate trustRoot = retrieveTrustRootCert();
+ +819 + + + + + + +
+ +820 + + + + + + +
    final Optional<MetadataBLOB> explicit = loadExplicitBlobOnly(trustRoot);
+ +821 + + +1 + +1. refreshBlob : negated conditional → KILLED
+ +
+
+
    if (explicit.isPresent()) {
+ +822 + + + + + + +
      log.debug("Explicit BLOB is set - disregarding cache and download.");
+ +823 + + +1 + +1. refreshBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlob → KILLED
+ +
+
+
      return explicit.get();
+ +824 + + + + + + +
    }
+ +825 + + + + + + +
+ +826 + + + + + + +
    final Optional<MetadataBLOB> cached = loadCachedBlobOnly(trustRoot);
+ +827 + + +1 + +1. refreshBlob : negated conditional → MEMORY_ERROR
+ +
+
+
    if (cached.isPresent()) {
+ +828 + + + + + + +
      log.debug("Cached BLOB exists, proceeding to compare against fresh BLOB...");
+ +829 + + + + + + +
    } else {
+ +830 + + + + + + +
      log.debug("Cached BLOB does not exist or is invalid.");
+ +831 + + + + + + +
    }
+ +832 + + + + + + +
+ +833 + + +1 + +1. refreshBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlob → KILLED
+ +
+
+
    return refreshBlobInternal(trustRoot, cached).get();
+ +834 + + + + + + +
  }
+ +835 + + + + + + +
+ +836 + + + + + + +
  private Optional<MetadataBLOB> refreshBlobInternal(
+ +837 + + +2 + +1. refreshBlobInternal : negated conditional → KILLED
+2. refreshBlobInternal : negated conditional → KILLED
+ +
+
+
      @NonNull X509Certificate trustRoot, @NonNull Optional<MetadataBLOB> cached)
+ +838 + + + + + + +
      throws CertPathValidatorException,
+ +839 + + + + + + +
          InvalidAlgorithmParameterException,
+ +840 + + + + + + +
          Base64UrlException,
+ +841 + + + + + + +
          CertificateException,
+ +842 + + + + + + +
          IOException,
+ +843 + + + + + + +
          NoSuchAlgorithmException,
+ +844 + + + + + + +
          SignatureException,
+ +845 + + + + + + +
          InvalidKeyException,
+ +846 + + + + + + +
          UnexpectedLegalHeader,
+ +847 + + + + + + +
          FidoMetadataDownloaderException {
+ +848 + + + + + + +
+ +849 + + + + + + +
    try {
+ +850 + + + + + + +
      log.debug("Attempting to download new BLOB...");
+ +851 + + + + + + +
      final ByteArray downloadedBytes = download(blobUrl);
+ +852 + + + + + + +
      final MetadataBLOB downloadedBlob = parseAndVerifyBlob(downloadedBytes, trustRoot);
+ +853 + + + + + + +
      log.debug("New BLOB downloaded.");
+ +854 + + + + + + +
+ +855 + + +1 + +1. refreshBlobInternal : negated conditional → KILLED
+ +
+
+
      if (cached.isPresent()) {
+ +856 + + + + + + +
        log.debug("Cached BLOB exists - checking if new BLOB has a higher \"no\"...");
+ +857 + + +2 + +1. refreshBlobInternal : changed conditional boundary → SURVIVED
+2. refreshBlobInternal : negated conditional → KILLED
+ +
+
+
        if (downloadedBlob.getPayload().getNo() <= cached.get().getPayload().getNo()) {
+ +858 + + + + + + +
          log.debug("New BLOB does not have a higher \"no\" - using cached BLOB instead.");
+ +859 + + +1 + +1. refreshBlobInternal : replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal → KILLED
+ +
+
+
          return cached;
+ +860 + + + + + + +
        }
+ +861 + + + + + + +
        log.debug("New BLOB has a higher \"no\" - proceeding with new BLOB.");
+ +862 + + + + + + +
      }
+ +863 + + + + + + +
+ +864 + + + + + + +
      log.debug("Checking legalHeader in new BLOB...");
+ +865 + + +1 + +1. refreshBlobInternal : negated conditional → KILLED
+ +
+
+
      if (!expectedLegalHeaders.contains(downloadedBlob.getPayload().getLegalHeader())) {
+ +866 + + + + + + +
        throw new UnexpectedLegalHeader(cached.orElse(null), downloadedBlob);
+ +867 + + + + + + +
      }
+ +868 + + + + + + +
+ +869 + + + + + + +
      log.debug("Writing new BLOB to cache...");
+ +870 + + +1 + +1. refreshBlobInternal : negated conditional → KILLED
+ +
+
+
      if (blobCacheFile != null) {
+ +871 + + + + + + +
        try (FileOutputStream f = new FileOutputStream(blobCacheFile)) {
+ +872 + + +1 + +1. refreshBlobInternal : removed call to java/io/FileOutputStream::write → MEMORY_ERROR
+ +
+
+
          f.write(downloadedBytes.getBytes());
+ +873 + + + + + + +
        }
+ +874 + + + + + + +
      }
+ +875 + + + + + + +
+ +876 + + +1 + +1. refreshBlobInternal : negated conditional → KILLED
+ +
+
+
      if (blobCacheConsumer != null) {
+ +877 + + +1 + +1. refreshBlobInternal : removed call to java/util/function/Consumer::accept → KILLED
+ +
+
+
        blobCacheConsumer.accept(downloadedBytes);
+ +878 + + + + + + +
      }
+ +879 + + + + + + +
+ +880 + + +1 + +1. refreshBlobInternal : replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal → KILLED
+ +
+
+
      return Optional.of(downloadedBlob);
+ +881 + + + + + + +
    } catch (FidoMetadataDownloaderException e) {
+ +882 + + +2 + +1. refreshBlobInternal : negated conditional → KILLED
+2. refreshBlobInternal : negated conditional → KILLED
+ +
+
+
      if (e.getReason() == Reason.BAD_SIGNATURE && cached.isPresent()) {
+ +883 + + + + + + +
        log.warn("New BLOB has bad signature - falling back to cached BLOB.");
+ +884 + + +1 + +1. refreshBlobInternal : replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal → KILLED
+ +
+
+
        return cached;
+ +885 + + + + + + +
      } else {
+ +886 + + + + + + +
        throw e;
+ +887 + + + + + + +
      }
+ +888 + + + + + + +
    } catch (Exception e) {
+ +889 + + +1 + +1. refreshBlobInternal : negated conditional → KILLED
+ +
+
+
      if (cached.isPresent()) {
+ +890 + + + + + + +
        log.warn("Failed to download new BLOB - falling back to cached BLOB.", e);
+ +891 + + +1 + +1. refreshBlobInternal : replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal → MEMORY_ERROR
+ +
+
+
        return cached;
+ +892 + + + + + + +
      } else {
+ +893 + + + + + + +
        throw e;
+ +894 + + + + + + +
      }
+ +895 + + + + + + +
    }
+ +896 + + + + + + +
  }
+ +897 + + + + + + +
+ +898 + + + + + + +
  /**
+ +899 + + + + + + +
   * @throws CertificateException if the trust root certificate was downloaded and passed the
+ +900 + + + + + + +
   *     SHA-256 integrity check, but does not contain a currently valid X.509 DER certificate.
+ +901 + + + + + + +
   * @throws DigestException if the trust root certificate was downloaded but failed the SHA-256
+ +902 + + + + + + +
   *     integrity check.
+ +903 + + + + + + +
   * @throws IOException if the trust root certificate download failed, or if reading or writing the
+ +904 + + + + + + +
   *     cache file (if any) failed.
+ +905 + + + + + + +
   * @throws NoSuchAlgorithmException if the SHA-256 algorithm is not available.
+ +906 + + + + + + +
   */
+ +907 + + + + + + +
  private X509Certificate retrieveTrustRootCert()
+ +908 + + + + + + +
      throws CertificateException, DigestException, IOException, NoSuchAlgorithmException {
+ +909 + + + + + + +
+ +910 + + +1 + +1. retrieveTrustRootCert : negated conditional → KILLED
+ +
+
+
    if (trustRootCertificate != null) {
+ +911 + + +1 + +1. retrieveTrustRootCert : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::retrieveTrustRootCert → KILLED
+ +
+
+
      return trustRootCertificate;
+ +912 + + + + + + +
+ +913 + + + + + + +
    } else {
+ +914 + + + + + + +
      final Optional<ByteArray> cachedContents;
+ +915 + + +1 + +1. retrieveTrustRootCert : negated conditional → KILLED
+ +
+
+
      if (trustRootCacheFile != null) {
+ +916 + + + + + + +
        cachedContents = readCacheFile(trustRootCacheFile);
+ +917 + + + + + + +
      } else {
+ +918 + + + + + + +
        cachedContents = trustRootCacheSupplier.get();
+ +919 + + + + + + +
      }
+ +920 + + + + + + +
+ +921 + + + + + + +
      X509Certificate cert = null;
+ +922 + + +1 + +1. retrieveTrustRootCert : negated conditional → KILLED
+ +
+
+
      if (cachedContents.isPresent()) {
+ +923 + + + + + + +
        final ByteArray verifiedCachedContents = verifyHash(cachedContents.get(), trustRootSha256);
+ +924 + + +1 + +1. retrieveTrustRootCert : negated conditional → KILLED
+ +
+
+
        if (verifiedCachedContents != null) {
+ +925 + + + + + + +
          try {
+ +926 + + + + + + +
            final X509Certificate cachedCert =
+ +927 + + + + + + +
                CertificateParser.parseDer(verifiedCachedContents.getBytes());
+ +928 + + +1 + +1. retrieveTrustRootCert : removed call to java/security/cert/X509Certificate::checkValidity → MEMORY_ERROR
+ +
+
+
            cachedCert.checkValidity(Date.from(clock.instant()));
+ +929 + + + + + + +
            cert = cachedCert;
+ +930 + + + + + + +
          } catch (CertificateException e) {
+ +931 + + + + + + +
            // Fall through
+ +932 + + + + + + +
          }
+ +933 + + + + + + +
        }
+ +934 + + + + + + +
      }
+ +935 + + + + + + +
+ +936 + + +1 + +1. retrieveTrustRootCert : negated conditional → KILLED
+ +
+
+
      if (cert == null) {
+ +937 + + + + + + +
        final ByteArray downloaded = verifyHash(download(trustRootUrl), trustRootSha256);
+ +938 + + +1 + +1. retrieveTrustRootCert : negated conditional → KILLED
+ +
+
+
        if (downloaded == null) {
+ +939 + + + + + + +
          throw new DigestException(
+ +940 + + + + + + +
              "Downloaded trust root certificate matches none of the acceptable hashes.");
+ +941 + + + + + + +
        }
+ +942 + + + + + + +
+ +943 + + + + + + +
        cert = CertificateParser.parseDer(downloaded.getBytes());
+ +944 + + +1 + +1. retrieveTrustRootCert : removed call to java/security/cert/X509Certificate::checkValidity → SURVIVED
+ +
+
+
        cert.checkValidity(Date.from(clock.instant()));
+ +945 + + + + + + +
+ +946 + + +1 + +1. retrieveTrustRootCert : negated conditional → KILLED
+ +
+
+
        if (trustRootCacheFile != null) {
+ +947 + + + + + + +
          try (FileOutputStream f = new FileOutputStream(trustRootCacheFile)) {
+ +948 + + +1 + +1. retrieveTrustRootCert : removed call to java/io/FileOutputStream::write → KILLED
+ +
+
+
            f.write(downloaded.getBytes());
+ +949 + + + + + + +
          }
+ +950 + + + + + + +
        }
+ +951 + + + + + + +
+ +952 + + +1 + +1. retrieveTrustRootCert : negated conditional → KILLED
+ +
+
+
        if (trustRootCacheConsumer != null) {
+ +953 + + +1 + +1. retrieveTrustRootCert : removed call to java/util/function/Consumer::accept → KILLED
+ +
+
+
          trustRootCacheConsumer.accept(downloaded);
+ +954 + + + + + + +
        }
+ +955 + + + + + + +
      }
+ +956 + + + + + + +
+ +957 + + +1 + +1. retrieveTrustRootCert : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::retrieveTrustRootCert → KILLED
+ +
+
+
      return cert;
+ +958 + + + + + + +
    }
+ +959 + + + + + + +
  }
+ +960 + + + + + + +
+ +961 + + + + + + +
  /**
+ +962 + + + + + + +
   * @throws Base64UrlException if the metadata BLOB is not a well-formed JWT in compact
+ +963 + + + + + + +
   *     serialization.
+ +964 + + + + + + +
   * @throws CertPathValidatorException if the explicitly configured BLOB fails certificate path
+ +965 + + + + + + +
   *     validation.
+ +966 + + + + + + +
   * @throws CertificateException if the BLOB signing certificate chain fails to parse.
+ +967 + + + + + + +
   * @throws IOException on failure to parse the BLOB contents.
+ +968 + + + + + + +
   * @throws InvalidAlgorithmParameterException if certificate path validation fails.
+ +969 + + + + + + +
   * @throws InvalidKeyException if signature verification fails.
+ +970 + + + + + + +
   * @throws NoSuchAlgorithmException if signature verification fails.
+ +971 + + + + + + +
   * @throws SignatureException if signature verification fails.
+ +972 + + + + + + +
   * @throws FidoMetadataDownloaderException if the explicitly configured BLOB (if any) has a bad
+ +973 + + + + + + +
   *     signature.
+ +974 + + + + + + +
   */
+ +975 + + + + + + +
  private Optional<MetadataBLOB> loadExplicitBlobOnly(X509Certificate trustRootCertificate)
+ +976 + + + + + + +
      throws Base64UrlException,
+ +977 + + + + + + +
          CertPathValidatorException,
+ +978 + + + + + + +
          CertificateException,
+ +979 + + + + + + +
          IOException,
+ +980 + + + + + + +
          InvalidAlgorithmParameterException,
+ +981 + + + + + + +
          InvalidKeyException,
+ +982 + + + + + + +
          NoSuchAlgorithmException,
+ +983 + + + + + + +
          SignatureException,
+ +984 + + + + + + +
          FidoMetadataDownloaderException {
+ +985 + + +1 + +1. loadExplicitBlobOnly : negated conditional → KILLED
+ +
+
+
    if (blobJwt != null) {
+ +986 + + +1 + +1. loadExplicitBlobOnly : replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::loadExplicitBlobOnly → KILLED
+ +
+
+
      return Optional.of(
+ +987 + + + + + + +
          parseAndMaybeVerifyBlob(
+ +988 + + + + + + +
              new ByteArray(blobJwt.getBytes(StandardCharsets.UTF_8)), trustRootCertificate));
+ +989 + + + + + + +
+ +990 + + + + + + +
    } else {
+ +991 + + + + + + +
      return Optional.empty();
+ +992 + + + + + + +
    }
+ +993 + + + + + + +
  }
+ +994 + + + + + + +
+ +995 + + + + + + +
  private Optional<MetadataBLOB> loadCachedBlobOnly(X509Certificate trustRootCertificate) {
+ +996 + + + + + + +
+ +997 + + + + + + +
    final Optional<ByteArray> cachedContents;
+ +998 + + +1 + +1. loadCachedBlobOnly : negated conditional → KILLED
+ +
+
+
    if (blobCacheFile != null) {
+ +999 + + + + + + +
      log.debug("Attempting to read BLOB from cache file...");
+ +1000 + + + + + + +
+ +1001 + + + + + + +
      try {
+ +1002 + + + + + + +
        cachedContents = readCacheFile(blobCacheFile);
+ +1003 + + + + + + +
      } catch (IOException e) {
+ +1004 + + + + + + +
        return Optional.empty();
+ +1005 + + + + + + +
      }
+ +1006 + + + + + + +
    } else {
+ +1007 + + + + + + +
      log.debug("Attempting to read BLOB from cache Supplier...");
+ +1008 + + + + + + +
      cachedContents = blobCacheSupplier.get();
+ +1009 + + + + + + +
    }
+ +1010 + + + + + + +
+ +1011 + + +1 + +1. loadCachedBlobOnly : replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlobOnly → KILLED
+ +
+
+
    return cachedContents.map(
+ +1012 + + + + + + +
        cached -> {
+ +1013 + + + + + + +
          try {
+ +1014 + + +1 + +1. lambda$loadCachedBlobOnly$0 : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::lambda$loadCachedBlobOnly$0 → KILLED
+ +
+
+
            return parseAndMaybeVerifyBlob(cached, trustRootCertificate);
+ +1015 + + + + + + +
          } catch (Exception e) {
+ +1016 + + + + + + +
            log.warn("Failed to read or parse cached BLOB.", e);
+ +1017 + + + + + + +
            return null;
+ +1018 + + + + + + +
          }
+ +1019 + + + + + + +
        });
+ +1020 + + + + + + +
  }
+ +1021 + + + + + + +
+ +1022 + + + + + + +
  private Optional<ByteArray> readCacheFile(File cacheFile) throws IOException {
+ +1023 + + +3 + +1. readCacheFile : negated conditional → KILLED
+2. readCacheFile : negated conditional → KILLED
+3. readCacheFile : negated conditional → KILLED
+ +
+
+
    if (cacheFile.exists() && cacheFile.canRead() && cacheFile.isFile()) {
+ +1024 + + + + + + +
      try (FileInputStream f = new FileInputStream(cacheFile)) {
+ +1025 + + + + + + +
        return Optional.of(readAll(f));
+ +1026 + + + + + + +
      } catch (FileNotFoundException e) {
+ +1027 + + + + + + +
        throw new RuntimeException(
+ +1028 + + + + + + +
            "This exception should be impossible, please file a bug report.", e);
+ +1029 + + + + + + +
      }
+ +1030 + + + + + + +
    } else {
+ +1031 + + + + + + +
      return Optional.empty();
+ +1032 + + + + + + +
    }
+ +1033 + + + + + + +
  }
+ +1034 + + + + + + +
+ +1035 + + + + + + +
  private ByteArray download(URL url) throws IOException {
+ +1036 + + + + + + +
    URLConnection conn = url.openConnection();
+ +1037 + + + + + + +
+ +1038 + + +1 + +1. download : negated conditional → KILLED
+ +
+
+
    if (conn instanceof HttpsURLConnection) {
+ +1039 + + + + + + +
      HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
+ +1040 + + +1 + +1. download : negated conditional → KILLED
+ +
+
+
      if (httpsTrustStore != null) {
+ +1041 + + + + + + +
        try {
+ +1042 + + + + + + +
          TrustManagerFactory trustMan =
+ +1043 + + + + + + +
              TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+ +1044 + + +1 + +1. download : removed call to javax/net/ssl/TrustManagerFactory::init → KILLED
+ +
+
+
          trustMan.init(httpsTrustStore);
+ +1045 + + + + + + +
          SSLContext sslContext = SSLContext.getInstance("TLS");
+ +1046 + + +1 + +1. download : removed call to javax/net/ssl/SSLContext::init → KILLED
+ +
+
+
          sslContext.init(null, trustMan.getTrustManagers(), null);
+ +1047 + + + + + + +
+ +1048 + + +1 + +1. download : removed call to javax/net/ssl/HttpsURLConnection::setSSLSocketFactory → KILLED
+ +
+
+
          httpsConn.setSSLSocketFactory(sslContext.getSocketFactory());
+ +1049 + + + + + + +
        } catch (NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {
+ +1050 + + + + + + +
          throw new RuntimeException(
+ +1051 + + + + + + +
              "Failed to initialize HTTPS trust store. This should be impossible, please file a bug report.",
+ +1052 + + + + + + +
              e);
+ +1053 + + + + + + +
        }
+ +1054 + + + + + + +
      }
+ +1055 + + +1 + +1. download : removed call to javax/net/ssl/HttpsURLConnection::setRequestMethod → SURVIVED
+ +
+
+
      httpsConn.setRequestMethod("GET");
+ +1056 + + + + + + +
    }
+ +1057 + + + + + + +
+ +1058 + + +1 + +1. download : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::download → KILLED
+ +
+
+
    return readAll(conn.getInputStream());
+ +1059 + + + + + + +
  }
+ +1060 + + + + + + +
+ +1061 + + + + + + +
  private MetadataBLOB parseAndVerifyBlob(ByteArray jwt, X509Certificate trustRootCertificate)
+ +1062 + + + + + + +
      throws CertPathValidatorException,
+ +1063 + + + + + + +
          InvalidAlgorithmParameterException,
+ +1064 + + + + + + +
          CertificateException,
+ +1065 + + + + + + +
          IOException,
+ +1066 + + + + + + +
          NoSuchAlgorithmException,
+ +1067 + + + + + + +
          SignatureException,
+ +1068 + + + + + + +
          InvalidKeyException,
+ +1069 + + + + + + +
          Base64UrlException,
+ +1070 + + + + + + +
          FidoMetadataDownloaderException {
+ +1071 + + +1 + +1. parseAndVerifyBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndVerifyBlob → KILLED
+ +
+
+
    return verifyBlob(parseBlob(jwt), trustRootCertificate);
+ +1072 + + + + + + +
  }
+ +1073 + + + + + + +
+ +1074 + + + + + + +
  private MetadataBLOB parseAndMaybeVerifyBlob(ByteArray jwt, X509Certificate trustRootCertificate)
+ +1075 + + + + + + +
      throws CertPathValidatorException,
+ +1076 + + + + + + +
          InvalidAlgorithmParameterException,
+ +1077 + + + + + + +
          CertificateException,
+ +1078 + + + + + + +
          IOException,
+ +1079 + + + + + + +
          NoSuchAlgorithmException,
+ +1080 + + + + + + +
          SignatureException,
+ +1081 + + + + + + +
          InvalidKeyException,
+ +1082 + + + + + + +
          Base64UrlException,
+ +1083 + + + + + + +
          FidoMetadataDownloaderException {
+ +1084 + + +1 + +1. parseAndMaybeVerifyBlob : negated conditional → KILLED
+ +
+
+
    if (verifyDownloadsOnly) {
+ +1085 + + +1 + +1. parseAndMaybeVerifyBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndMaybeVerifyBlob → KILLED
+ +
+
+
      return parseBlob(jwt).blob;
+ +1086 + + + + + + +
    } else {
+ +1087 + + +1 + +1. parseAndMaybeVerifyBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndMaybeVerifyBlob → KILLED
+ +
+
+
      return verifyBlob(parseBlob(jwt), trustRootCertificate);
+ +1088 + + + + + + +
    }
+ +1089 + + + + + + +
  }
+ +1090 + + + + + + +
+ +1091 + + + + + + +
  private MetadataBLOB verifyBlob(ParseResult parseResult, X509Certificate trustRootCertificate)
+ +1092 + + + + + + +
      throws IOException,
+ +1093 + + + + + + +
          CertificateException,
+ +1094 + + + + + + +
          NoSuchAlgorithmException,
+ +1095 + + + + + + +
          InvalidKeyException,
+ +1096 + + + + + + +
          SignatureException,
+ +1097 + + + + + + +
          CertPathValidatorException,
+ +1098 + + + + + + +
          InvalidAlgorithmParameterException,
+ +1099 + + + + + + +
          FidoMetadataDownloaderException {
+ +1100 + + + + + + +
    final MetadataBLOBHeader header = parseResult.blob.getHeader();
+ +1101 + + + + + + +
+ +1102 + + + + + + +
    final List<X509Certificate> certChain;
+ +1103 + + +1 + +1. verifyBlob : negated conditional → KILLED
+ +
+
+
    if (header.getX5u().isPresent()) {
+ +1104 + + + + + + +
      final URL x5u = header.getX5u().get();
+ +1105 + + +1 + +1. verifyBlob : negated conditional → KILLED
+ +
+
+
      if (blobUrl != null
+ +1106 + + +1 + +1. verifyBlob : negated conditional → SURVIVED
+ +
+
+
          && (!(x5u.getHost().equals(blobUrl.getHost())
+ +1107 + + +1 + +1. verifyBlob : negated conditional → SURVIVED
+ +
+
+
              && x5u.getProtocol().equals(blobUrl.getProtocol())
+ +1108 + + +1 + +1. verifyBlob : negated conditional → KILLED
+ +
+
+
              && x5u.getPort() == blobUrl.getPort()))) {
+ +1109 + + + + + + +
        throw new IllegalArgumentException(
+ +1110 + + + + + + +
            String.format(
+ +1111 + + + + + + +
                "x5u in BLOB header must have same origin as the URL the BLOB was downloaded from. Expected origin of: %s ; found: %s",
+ +1112 + + + + + + +
                blobUrl, x5u));
+ +1113 + + + + + + +
      }
+ +1114 + + + + + + +
      List<X509Certificate> certs = new ArrayList<>();
+ +1115 + + + + + + +
      for (String pem :
+ +1116 + + + + + + +
          new String(download(x5u).getBytes(), StandardCharsets.UTF_8)
+ +1117 + + + + + + +
              .trim()
+ +1118 + + + + + + +
              .split("\\n+-----END CERTIFICATE-----\\n+-----BEGIN CERTIFICATE-----\\n+")) {
+ +1119 + + + + + + +
        X509Certificate x509Certificate = CertificateParser.parsePem(pem);
+ +1120 + + + + + + +
        certs.add(x509Certificate);
+ +1121 + + + + + + +
      }
+ +1122 + + + + + + +
      certChain = certs;
+ +1123 + + +1 + +1. verifyBlob : negated conditional → KILLED
+ +
+
+
    } else if (header.getX5c().isPresent()) {
+ +1124 + + + + + + +
      certChain = header.getX5c().get();
+ +1125 + + + + + + +
    } else {
+ +1126 + + + + + + +
      certChain = Collections.singletonList(trustRootCertificate);
+ +1127 + + + + + + +
    }
+ +1128 + + + + + + +
+ +1129 + + + + + + +
    final X509Certificate leafCert = certChain.get(0);
+ +1130 + + + + + + +
+ +1131 + + + + + + +
    final Signature signature;
+ +1132 + + + + + + +
    switch (header.getAlg()) {
+ +1133 + + + + + + +
      case "RS256":
+ +1134 + + + + + + +
        signature = Signature.getInstance("SHA256withRSA");
+ +1135 + + + + + + +
        break;
+ +1136 + + + + + + +
+ +1137 + + + + + + +
      case "ES256":
+ +1138 + + + + + + +
        signature = Signature.getInstance("SHA256withECDSA");
+ +1139 + + + + + + +
        break;
+ +1140 + + + + + + +
+ +1141 + + + + + + +
      default:
+ +1142 + + + + + + +
        throw new UnsupportedOperationException(
+ +1143 + + + + + + +
            "Unimplemented JWT verification algorithm: " + header.getAlg());
+ +1144 + + + + + + +
    }
+ +1145 + + + + + + +
+ +1146 + + +1 + +1. verifyBlob : removed call to java/security/Signature::initVerify → KILLED
+ +
+
+
    signature.initVerify(leafCert.getPublicKey());
+ +1147 + + +1 + +1. verifyBlob : removed call to java/security/Signature::update → KILLED
+ +
+
+
    signature.update(
+ +1148 + + + + + + +
        (parseResult.jwtHeader.getBase64Url() + "." + parseResult.jwtPayload.getBase64Url())
+ +1149 + + + + + + +
            .getBytes(StandardCharsets.UTF_8));
+ +1150 + + +1 + +1. verifyBlob : negated conditional → KILLED
+ +
+
+
    if (!signature.verify(parseResult.jwtSignature.getBytes())) {
+ +1151 + + + + + + +
      throw new FidoMetadataDownloaderException(Reason.BAD_SIGNATURE);
+ +1152 + + + + + + +
    }
+ +1153 + + + + + + +
+ +1154 + + + + + + +
    final CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+ +1155 + + + + + + +
    final CertPathValidator cpv = CertPathValidator.getInstance("PKIX");
+ +1156 + + + + + + +
    final CertPath blobCertPath = certFactory.generateCertPath(certChain);
+ +1157 + + + + + + +
    final PKIXParameters pathParams =
+ +1158 + + + + + + +
        new PKIXParameters(Collections.singleton(new TrustAnchor(trustRootCertificate, null)));
+ +1159 + + +1 + +1. verifyBlob : negated conditional → KILLED
+ +
+
+
    if (certStore != null) {
+ +1160 + + +1 + +1. verifyBlob : removed call to java/security/cert/PKIXParameters::addCertStore → KILLED
+ +
+
+
      pathParams.addCertStore(certStore);
+ +1161 + + + + + + +
    }
+ +1162 + + +1 + +1. verifyBlob : removed call to java/security/cert/PKIXParameters::setDate → KILLED
+ +
+
+
    pathParams.setDate(Date.from(clock.instant()));
+ +1163 + + + + + + +
    cpv.validate(blobCertPath, pathParams);
+ +1164 + + + + + + +
+ +1165 + + +1 + +1. verifyBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::verifyBlob → KILLED
+ +
+
+
    return parseResult.blob;
+ +1166 + + + + + + +
  }
+ +1167 + + + + + + +
+ +1168 + + + + + + +
  private static ParseResult parseBlob(ByteArray jwt) throws IOException, Base64UrlException {
+ +1169 + + + + + + +
    Scanner s = new Scanner(new ByteArrayInputStream(jwt.getBytes())).useDelimiter("\\.");
+ +1170 + + + + + + +
    final ByteArray jwtHeader = ByteArray.fromBase64Url(s.next());
+ +1171 + + + + + + +
    final ByteArray jwtPayload = ByteArray.fromBase64Url(s.next());
+ +1172 + + + + + + +
    final ByteArray jwtSignature = ByteArray.fromBase64Url(s.next());
+ +1173 + + + + + + +
+ +1174 + + + + + + +
    final ObjectMapper headerJsonMapper =
+ +1175 + + + + + + +
        com.yubico.internal.util.JacksonCodecs.json()
+ +1176 + + + + + + +
            .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
+ +1177 + + + + + + +
            .setBase64Variant(Base64Variants.MIME_NO_LINEFEEDS);
+ +1178 + + + + + + +
+ +1179 + + +1 + +1. parseBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseBlob → KILLED
+ +
+
+
    return new ParseResult(
+ +1180 + + + + + + +
        new MetadataBLOB(
+ +1181 + + + + + + +
            headerJsonMapper.readValue(jwtHeader.getBytes(), MetadataBLOBHeader.class),
+ +1182 + + + + + + +
            JacksonCodecs.jsonWithDefaultEnums()
+ +1183 + + + + + + +
                .readValue(jwtPayload.getBytes(), MetadataBLOBPayload.class)),
+ +1184 + + + + + + +
        jwtHeader,
+ +1185 + + + + + + +
        jwtPayload,
+ +1186 + + + + + + +
        jwtSignature);
+ +1187 + + + + + + +
  }
+ +1188 + + + + + + +
+ +1189 + + + + + + +
  private static ByteArray readAll(InputStream is) throws IOException {
+ +1190 + + +1 + +1. readAll : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::readAll → KILLED
+ +
+
+
    return new ByteArray(BinaryUtil.readAll(is));
+ +1191 + + + + + + +
  }
+ +1192 + + + + + + +
+ +1193 + + + + + + +
  /**
+ +1194 + + + + + + +
   * @return <code>contents</code> if its SHA-256 hash matches any element of <code>
+ +1195 + + + + + + +
   *     acceptedCertSha256</code>, otherwise <code>null</code>.
+ +1196 + + + + + + +
   */
+ +1197 + + + + + + +
  private static ByteArray verifyHash(ByteArray contents, Set<ByteArray> acceptedCertSha256)
+ +1198 + + + + + + +
      throws NoSuchAlgorithmException {
+ +1199 + + + + + + +
    MessageDigest digest = MessageDigest.getInstance("SHA-256");
+ +1200 + + + + + + +
    final ByteArray hash = new ByteArray(digest.digest(contents.getBytes()));
+ +1201 + + +1 + +1. verifyHash : negated conditional → KILLED
+ +
+
+
    if (acceptedCertSha256.stream().anyMatch(hash::equals)) {
+ +1202 + + +1 + +1. verifyHash : replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::verifyHash → KILLED
+ +
+
+
      return contents;
+ +1203 + + + + + + +
    } else {
+ +1204 + + + + + + +
      return null;
+ +1205 + + + + + + +
    }
+ +1206 + + + + + + +
  }
+ +1207 + + + + + + +
+ +1208 + + + + + + +
  @Value
+ +1209 + + + + + + +
  private static class ParseResult {
+ +1210 + + + + + + +
    private MetadataBLOB blob;
+ +1211 + + + + + + +
    private ByteArray jwtHeader;
+ +1212 + + + + + + +
    private ByteArray jwtPayload;
+ +1213 + + + + + + +
    private ByteArray jwtSignature;
+ +1214 + + + + + + +
  }
+ +1215 + + + + + + +
}

Mutations

132 + + + +

1.1
Location : builder
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::builder → KILLED

+
156 + + + +

1.1
Location : build
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::build → KILLED

+
220 + + + +

1.1
Location : expectLegalHeader
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
221 + + + +

1.1
Location : expectLegalHeader
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1::expectLegalHeader → KILLED

+
266 + + + +

1.1
Location : useDefaultTrustRoot
Killed by : none
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::useDefaultTrustRoot → NO_COVERAGE

+
295 + + + +

1.1
Location : downloadTrustRoot
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

2.2
Location : downloadTrustRoot
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
296 + + + +

1.1
Location : downloadTrustRoot
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
299 + + + +

1.1
Location : downloadTrustRoot
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::downloadTrustRoot → KILLED

+
308 + + + +

1.1
Location : useTrustRoot
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
309 + + + +

1.1
Location : useTrustRoot
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::useTrustRoot → KILLED

+
342 + + + +

1.1
Location : useTrustRootCacheFile
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
343 + + + +

1.1
Location : useTrustRootCacheFile
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3::useTrustRootCacheFile → KILLED

+
365 + + + +

1.1
Location : useTrustRootCache
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
366 + + + +

1.1
Location : useTrustRootCache
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
367 + + + +

1.1
Location : useTrustRootCache
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3::useTrustRootCache → KILLED

+
405 + + + +

1.1
Location : useDefaultBlob
Killed by : none
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::useDefaultBlob → NO_COVERAGE

+
423 + + + +

1.1
Location : downloadBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
424 + + + +

1.1
Location : downloadBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::downloadBlob → KILLED

+
445 + + + +

1.1
Location : useBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
446 + + + +

1.1
Location : useBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::useBlob → KILLED

+
479 + + + +

1.1
Location : useBlobCacheFile
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
480 + + + +

1.1
Location : useBlobCacheFile
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5::useBlobCacheFile → KILLED

+
503 + + + +

1.1
Location : useBlobCache
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
504 + + + +

1.1
Location : useBlobCache
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
505 + + + +

1.1
Location : useBlobCache
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5::useBlobCache → KILLED

+
514 + + + +

1.1
Location : finishRequiredSteps
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::finishRequiredSteps → KILLED

+
539 + + + +

1.1
Location : clock
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
541 + + + +

1.1
Location : clock
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::clock → KILLED

+
557 + + + +

1.1
Location : useCrls
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
559 + + + +

1.1
Location : useCrls
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::useCrls → KILLED

+
573 + + + +

1.1
Location : useCrls
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::useCrls → KILLED

+
592 + + + +

1.1
Location : trustHttpsCerts
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
596 + + + +

1.1
Location : trustHttpsCerts
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
removed call to java/security/KeyStore::load → KILLED

+
607 + + + +

1.1
Location : trustHttpsCerts
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
removed call to java/security/KeyStore::setCertificateEntry → KILLED

+
616 + + + +

1.1
Location : trustHttpsCerts
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::trustHttpsCerts → KILLED

+
636 + + + +

1.1
Location : verifyDownloadsOnly
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::verifyDownloadsOnly → KILLED

+
718 + + + +

1.1
Location : loadCachedBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
720 + + + +

1.1
Location : loadCachedBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob → KILLED

+
724 + + + +

1.1
Location : loadCachedBlob
Killed by : none
negated conditional → MEMORY_ERROR

+
732 + + + +

1.1
Location : loadCachedBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
734 + + + +

1.1
Location : loadCachedBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob → KILLED

+
743 + + + +

1.1
Location : loadCachedBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob → KILLED

+
821 + + + +

1.1
Location : refreshBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
823 + + + +

1.1
Location : refreshBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlob → KILLED

+
827 + + + +

1.1
Location : refreshBlob
Killed by : none
negated conditional → MEMORY_ERROR

+
833 + + + +

1.1
Location : refreshBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlob → KILLED

+
837 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

2.2
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
855 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
857 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

2.2
Location : refreshBlobInternal
Killed by : none
changed conditional boundary → SURVIVED

+
859 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal → KILLED

+
865 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
870 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
872 + + + +

1.1
Location : refreshBlobInternal
Killed by : none
removed call to java/io/FileOutputStream::write → MEMORY_ERROR

+
876 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
877 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
removed call to java/util/function/Consumer::accept → KILLED

+
880 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal → KILLED

+
882 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

2.2
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
884 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal → KILLED

+
889 + + + +

1.1
Location : refreshBlobInternal
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
891 + + + +

1.1
Location : refreshBlobInternal
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal → MEMORY_ERROR

+
910 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
911 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::retrieveTrustRootCert → KILLED

+
915 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
922 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
924 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
928 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : none
removed call to java/security/cert/X509Certificate::checkValidity → MEMORY_ERROR

+
936 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
938 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
944 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : none
removed call to java/security/cert/X509Certificate::checkValidity → SURVIVED

+
946 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
948 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
removed call to java/io/FileOutputStream::write → KILLED

+
952 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
953 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
removed call to java/util/function/Consumer::accept → KILLED

+
957 + + + +

1.1
Location : retrieveTrustRootCert
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::retrieveTrustRootCert → KILLED

+
985 + + + +

1.1
Location : loadExplicitBlobOnly
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
986 + + + +

1.1
Location : loadExplicitBlobOnly
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::loadExplicitBlobOnly → KILLED

+
998 + + + +

1.1
Location : loadCachedBlobOnly
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
1011 + + + +

1.1
Location : loadCachedBlobOnly
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlobOnly → KILLED

+
1014 + + + +

1.1
Location : lambda$loadCachedBlobOnly$0
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::lambda$loadCachedBlobOnly$0 → KILLED

+
1023 + + + +

1.1
Location : readCacheFile
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

2.2
Location : readCacheFile
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

3.3
Location : readCacheFile
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
1038 + + + +

1.1
Location : download
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
1040 + + + +

1.1
Location : download
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
1044 + + + +

1.1
Location : download
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
removed call to javax/net/ssl/TrustManagerFactory::init → KILLED

+
1046 + + + +

1.1
Location : download
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
removed call to javax/net/ssl/SSLContext::init → KILLED

+
1048 + + + +

1.1
Location : download
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
removed call to javax/net/ssl/HttpsURLConnection::setSSLSocketFactory → KILLED

+
1055 + + + +

1.1
Location : download
Killed by : none
removed call to javax/net/ssl/HttpsURLConnection::setRequestMethod → SURVIVED

+
1058 + + + +

1.1
Location : download
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::download → KILLED

+
1071 + + + +

1.1
Location : parseAndVerifyBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndVerifyBlob → KILLED

+
1084 + + + +

1.1
Location : parseAndMaybeVerifyBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
1085 + + + +

1.1
Location : parseAndMaybeVerifyBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndMaybeVerifyBlob → KILLED

+
1087 + + + +

1.1
Location : parseAndMaybeVerifyBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndMaybeVerifyBlob → KILLED

+
1103 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
1105 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
1106 + + + +

1.1
Location : verifyBlob
Killed by : none
negated conditional → SURVIVED

+
1107 + + + +

1.1
Location : verifyBlob
Killed by : none
negated conditional → SURVIVED

+
1108 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
1123 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
1146 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
removed call to java/security/Signature::initVerify → KILLED

+
1147 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
removed call to java/security/Signature::update → KILLED

+
1150 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
1159 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
1160 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
removed call to java/security/cert/PKIXParameters::addCertStore → KILLED

+
1162 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
removed call to java/security/cert/PKIXParameters::setDate → KILLED

+
1165 + + + +

1.1
Location : verifyBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::verifyBlob → KILLED

+
1179 + + + +

1.1
Location : parseBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseBlob → KILLED

+
1190 + + + +

1.1
Location : readAll
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::readAll → KILLED

+
1201 + + + +

1.1
Location : verifyHash
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
1202 + + + +

1.1
Location : verifyHash
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::verifyHash → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataDownloaderException.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataDownloaderException.java.html new file mode 100644 index 000000000..8d01b621a --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataDownloaderException.java.html @@ -0,0 +1,670 @@ + + + + + + + + + +

FidoMetadataDownloaderException.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import lombok.Getter;
+ +4 + + + + + + +
import lombok.NonNull;
+ +5 + + + + + + +
+ +6 + + + + + + +
public class FidoMetadataDownloaderException extends Exception {
+ +7 + + + + + + +
+ +8 + + + + + + +
  public enum Reason {
+ +9 + + + + + + +
    BAD_SIGNATURE("Bad JWT signature.");
+ +10 + + + + + + +
+ +11 + + + + + + +
    private final String message;
+ +12 + + + + + + +
+ +13 + + + + + + +
    Reason(String message) {
+ +14 + + + + + + +
      this.message = message;
+ +15 + + + + + + +
    }
+ +16 + + + + + + +
  }
+ +17 + + + + + + +
+ +18 + + + + + + +
  @NonNull @Getter
+ +19 + + + + + + +
  /** The reason why this exception was thrown. */
+ +20 + + + + + + +
  private final Reason reason;
+ +21 + + + + + + +
+ +22 + + + + + + +
  /** A {@link Throwable} that caused this exception. May be null. */
+ +23 + + + + + + +
  @Getter private final Throwable cause;
+ +24 + + + + + + +
+ +25 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
  FidoMetadataDownloaderException(@NonNull Reason reason, Throwable cause) {
+ +26 + + + + + + +
    super(cause);
+ +27 + + + + + + +
    this.reason = reason;
+ +28 + + + + + + +
    this.cause = cause;
+ +29 + + + + + + +
  }
+ +30 + + + + + + +
+ +31 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
  FidoMetadataDownloaderException(@NonNull Reason reason) {
+ +32 + + + + + + +
    this(reason, null);
+ +33 + + + + + + +
  }
+ +34 + + + + + + +
+ +35 + + + + + + +
  @Override
+ +36 + + + + + + +
  public String getMessage() {
+ +37 + + +1 + +1. getMessage : replaced return value with "" for com/yubico/fido/metadata/FidoMetadataDownloaderException::getMessage → NO_COVERAGE
+ +
+
+
    return reason.message;
+ +38 + + + + + + +
  }
+ +39 + + + + + + +
}

Mutations

25 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
31 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
negated conditional → KILLED

+
37 + + + +

1.1
Location : getMessage
Killed by : none
replaced return value with "" for com/yubico/fido/metadata/FidoMetadataDownloaderException::getMessage → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataService.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataService.java.html new file mode 100644 index 000000000..45eb6500e --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/FidoMetadataService.java.html @@ -0,0 +1,10729 @@ + + + + + + + + + +

FidoMetadataService.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2015-2021, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.fido.metadata;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.fido.metadata.FidoMetadataService.Filters.AuthenticatorToBeFiltered;
+ +28 + + + + + + +
import com.yubico.internal.util.CertificateParser;
+ +29 + + + + + + +
import com.yubico.internal.util.OptionalUtil;
+ +30 + + + + + + +
import com.yubico.webauthn.RegistrationResult;
+ +31 + + + + + + +
import com.yubico.webauthn.RelyingParty;
+ +32 + + + + + + +
import com.yubico.webauthn.RelyingParty.RelyingPartyBuilder;
+ +33 + + + + + + +
import com.yubico.webauthn.attestation.AttestationTrustSource;
+ +34 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +35 + + + + + + +
import com.yubico.webauthn.data.exception.Base64UrlException;
+ +36 + + + + + + +
import java.io.IOException;
+ +37 + + + + + + +
import java.security.DigestException;
+ +38 + + + + + + +
import java.security.InvalidAlgorithmParameterException;
+ +39 + + + + + + +
import java.security.InvalidKeyException;
+ +40 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +41 + + + + + + +
import java.security.SignatureException;
+ +42 + + + + + + +
import java.security.cert.CertPathValidatorException;
+ +43 + + + + + + +
import java.security.cert.CertStore;
+ +44 + + + + + + +
import java.security.cert.CertificateException;
+ +45 + + + + + + +
import java.security.cert.X509Certificate;
+ +46 + + + + + + +
import java.util.Arrays;
+ +47 + + + + + + +
import java.util.Collection;
+ +48 + + + + + + +
import java.util.Collections;
+ +49 + + + + + + +
import java.util.HashMap;
+ +50 + + + + + + +
import java.util.HashSet;
+ +51 + + + + + + +
import java.util.List;
+ +52 + + + + + + +
import java.util.Map;
+ +53 + + + + + + +
import java.util.Optional;
+ +54 + + + + + + +
import java.util.Set;
+ +55 + + + + + + +
import java.util.function.Consumer;
+ +56 + + + + + + +
import java.util.function.Predicate;
+ +57 + + + + + + +
import java.util.stream.Collectors;
+ +58 + + + + + + +
import java.util.stream.Stream;
+ +59 + + + + + + +
import lombok.AccessLevel;
+ +60 + + + + + + +
import lombok.AllArgsConstructor;
+ +61 + + + + + + +
import lombok.NonNull;
+ +62 + + + + + + +
import lombok.RequiredArgsConstructor;
+ +63 + + + + + + +
import lombok.Value;
+ +64 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +65 + + + + + + +
+ +66 + + + + + + +
/**
+ +67 + + + + + + +
 * Utility for filtering and querying <a
+ +68 + + + + + + +
 * href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">Fido
+ +69 + + + + + + +
 * Metadata Service BLOB entries</a>.
+ +70 + + + + + + +
 *
+ +71 + + + + + + +
 * <p>This class implements {@link AttestationTrustSource}, so it can be configured as the {@link
+ +72 + + + + + + +
 * RelyingPartyBuilder#attestationTrustSource(AttestationTrustSource) attestationTrustSource}
+ +73 + + + + + + +
 * setting in {@link RelyingParty}. This implementation always sets {@link
+ +74 + + + + + + +
 * com.yubico.webauthn.attestation.AttestationTrustSource.TrustRootsResult.TrustRootsResultBuilder#enableRevocationChecking(boolean)
+ +75 + + + + + + +
 * enableRevocationChecking(false)}, because the FIDO MDS has its own revocation procedures and not
+ +76 + + + + + + +
 * all attestation certificates provide CRLs; and always sets {@link
+ +77 + + + + + + +
 * com.yubico.webauthn.attestation.AttestationTrustSource.TrustRootsResult.TrustRootsResultBuilder#policyTreeValidator(Predicate)
+ +78 + + + + + + +
 * policyTreeValidator} to accept any policy tree, because a Windows Hello attestation certificate
+ +79 + + + + + + +
 * is known to include a critical certificate policies extension.
+ +80 + + + + + + +
 *
+ +81 + + + + + + +
 * <p>The metadata service may be configured with two stages of filters to select trusted
+ +82 + + + + + + +
 * authenticators. The first stage is the {@link FidoMetadataServiceBuilder#prefilter(Predicate)
+ +83 + + + + + + +
 * prefilter} setting, which is executed once when the {@link FidoMetadataService} instance is
+ +84 + + + + + + +
 * constructed. The second stage is the {@link FidoMetadataServiceBuilder#filter(Predicate) filter}
+ +85 + + + + + + +
 * setting, which is executed whenever metadata or trust roots are to be looked up for a given
+ +86 + + + + + + +
 * authenticator. Any metadata entry that satisfies both filters will be considered trusted.
+ +87 + + + + + + +
 *
+ +88 + + + + + + +
 * <p>Use the {@link #builder() builder} to configure settings, then use the {@link
+ +89 + + + + + + +
 * #findEntries(List, AAGUID)} method or its overloads to retrieve metadata entries.
+ +90 + + + + + + +
 */
+ +91 + + + + + + +
@Slf4j
+ +92 + + + + + + +
public final class FidoMetadataService implements AttestationTrustSource {
+ +93 + + + + + + +
+ +94 + + + + + + +
  private final HashMap<String, HashSet<MetadataBLOBPayloadEntry>>
+ +95 + + + + + + +
      prefilteredEntriesByCertificateKeyIdentifier;
+ +96 + + + + + + +
  private final HashMap<AAGUID, HashSet<MetadataBLOBPayloadEntry>> prefilteredEntriesByAaguid;
+ +97 + + + + + + +
  private final HashSet<MetadataBLOBPayloadEntry> prefilteredUnindexedEntries;
+ +98 + + + + + + +
+ +99 + + + + + + +
  private final Predicate<AuthenticatorToBeFiltered> filter;
+ +100 + + + + + + +
  private final CertStore certStore;
+ +101 + + + + + + +
+ +102 + + + + + + +
  private FidoMetadataService(
+ +103 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull MetadataBLOBPayload blob,
+ +104 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Predicate<MetadataBLOBPayloadEntry> prefilter,
+ +105 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Predicate<AuthenticatorToBeFiltered> filter,
+ +106 + + + + + + +
      CertStore certStore) {
+ +107 + + + + + + +
    final List<MetadataBLOBPayloadEntry> prefilteredEntries =
+ +108 + + + + + + +
        blob.getEntries().stream()
+ +109 + + + + + + +
            .filter(FidoMetadataService::ignoreInvalidUpdateAvailableAuthenticatorVersion)
+ +110 + + + + + + +
            .filter(prefilter)
+ +111 + + + + + + +
            .collect(Collectors.toList());
+ +112 + + + + + + +
+ +113 + + + + + + +
    this.prefilteredEntriesByCertificateKeyIdentifier = buildCkiMap(prefilteredEntries);
+ +114 + + + + + + +
    this.prefilteredEntriesByAaguid = buildAaguidMap(prefilteredEntries);
+ +115 + + + + + + +
+ +116 + + + + + + +
    this.prefilteredUnindexedEntries = new HashSet<>(prefilteredEntries);
+ +117 + + + + + + +
    for (HashSet<MetadataBLOBPayloadEntry> byAaguid : prefilteredEntriesByAaguid.values()) {
+ +118 + + + + + + +
      prefilteredUnindexedEntries.removeAll(byAaguid);
+ +119 + + + + + + +
    }
+ +120 + + + + + + +
    for (HashSet<MetadataBLOBPayloadEntry> byCski :
+ +121 + + + + + + +
        prefilteredEntriesByCertificateKeyIdentifier.values()) {
+ +122 + + + + + + +
      prefilteredUnindexedEntries.removeAll(byCski);
+ +123 + + + + + + +
    }
+ +124 + + + + + + +
+ +125 + + + + + + +
    this.filter = filter;
+ +126 + + + + + + +
    this.certStore = certStore;
+ +127 + + + + + + +
  }
+ +128 + + + + + + +
+ +129 + + + + + + +
  private static boolean ignoreInvalidUpdateAvailableAuthenticatorVersion(
+ +130 + + + + + + +
      MetadataBLOBPayloadEntry metadataBLOBPayloadEntry) {
+ +131 + + +2 + +1. ignoreInvalidUpdateAvailableAuthenticatorVersion : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::ignoreInvalidUpdateAvailableAuthenticatorVersion → KILLED
+2. ignoreInvalidUpdateAvailableAuthenticatorVersion : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::ignoreInvalidUpdateAvailableAuthenticatorVersion → KILLED
+ +
+
+
    return metadataBLOBPayloadEntry
+ +132 + + + + + + +
        .getMetadataStatement()
+ +133 + + + + + + +
        .map(MetadataStatement::getAuthenticatorVersion)
+ +134 + + + + + + +
        .map(
+ +135 + + + + + + +
            authenticatorVersion ->
+ +136 + + +2 + +1. lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 : replaced Boolean return with True for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 → KILLED
+2. lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 : replaced Boolean return with False for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 → KILLED
+ +
+
+
                metadataBLOBPayloadEntry.getStatusReports().stream()
+ +137 + + + + + + +
                    .filter(
+ +138 + + + + + + +
                        statusReport ->
+ +139 + + +2 + +1. lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 → SURVIVED
+2. lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 → KILLED
+ +
+
+
                            AuthenticatorStatus.UPDATE_AVAILABLE.equals(statusReport.getStatus()))
+ +140 + + + + + + +
                    .noneMatch(
+ +141 + + + + + + +
                        statusReport ->
+ +142 + + + + + + +
                            statusReport
+ +143 + + + + + + +
                                .getAuthenticatorVersion()
+ +144 + + +3 + +1. lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 : changed conditional boundary → KILLED
+2. lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 : replaced Boolean return with True for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 → KILLED
+3. lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 : negated conditional → KILLED
+ +
+
+
                                .map(av -> av > authenticatorVersion)
+ +145 + + +2 + +1. lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 → KILLED
+2. lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 → KILLED
+ +
+
+
                                .orElse(false)))
+ +146 + + + + + + +
        .orElse(true);
+ +147 + + + + + + +
  }
+ +148 + + + + + + +
+ +149 + + + + + + +
  private static HashMap<String, HashSet<MetadataBLOBPayloadEntry>> buildCkiMap(
+ +150 + + +1 + +1. buildCkiMap : negated conditional → KILLED
+ +
+
+
      @NonNull List<MetadataBLOBPayloadEntry> entries) {
+ +151 + + + + + + +
+ +152 + + +1 + +1. buildCkiMap : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::buildCkiMap → KILLED
+ +
+
+
    return entries.stream()
+ +153 + + + + + + +
        .collect(
+ +154 + + + + + + +
            HashMap::new,
+ +155 + + + + + + +
            (result, metadataBLOBPayloadEntry) -> {
+ +156 + + + + + + +
              for (String acki :
+ +157 + + + + + + +
                  metadataBLOBPayloadEntry.getAttestationCertificateKeyIdentifiers()) {
+ +158 + + +1 + +1. lambda$buildCkiMap$4 : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$4 → KILLED
+ +
+
+
                result.computeIfAbsent(acki, o -> new HashSet<>()).add(metadataBLOBPayloadEntry);
+ +159 + + + + + + +
              }
+ +160 + + + + + + +
              for (String acki :
+ +161 + + + + + + +
                  metadataBLOBPayloadEntry
+ +162 + + + + + + +
                      .getMetadataStatement()
+ +163 + + + + + + +
                      .map(MetadataStatement::getAttestationCertificateKeyIdentifiers)
+ +164 + + + + + + +
                      .orElseGet(Collections::emptySet)) {
+ +165 + + +1 + +1. lambda$buildCkiMap$5 : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$5 → KILLED
+ +
+
+
                result.computeIfAbsent(acki, o -> new HashSet<>()).add(metadataBLOBPayloadEntry);
+ +166 + + + + + + +
              }
+ +167 + + + + + + +
            },
+ +168 + + + + + + +
            (mapA, mapB) -> {
+ +169 + + + + + + +
              for (Map.Entry<String, HashSet<MetadataBLOBPayloadEntry>> e : mapB.entrySet()) {
+ +170 + + + + + + +
                mapA.merge(
+ +171 + + + + + + +
                    e.getKey(),
+ +172 + + + + + + +
                    e.getValue(),
+ +173 + + + + + + +
                    (entriesA, entriesB) -> {
+ +174 + + + + + + +
                      entriesA.addAll(entriesB);
+ +175 + + +1 + +1. lambda$buildCkiMap$7 : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$7 → NO_COVERAGE
+ +
+
+
                      return entriesA;
+ +176 + + + + + + +
                    });
+ +177 + + + + + + +
              }
+ +178 + + + + + + +
            });
+ +179 + + + + + + +
  }
+ +180 + + + + + + +
+ +181 + + + + + + +
  private static HashMap<AAGUID, HashSet<MetadataBLOBPayloadEntry>> buildAaguidMap(
+ +182 + + +1 + +1. buildAaguidMap : negated conditional → KILLED
+ +
+
+
      @NonNull List<MetadataBLOBPayloadEntry> entries) {
+ +183 + + + + + + +
+ +184 + + +1 + +1. buildAaguidMap : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::buildAaguidMap → KILLED
+ +
+
+
    return entries.stream()
+ +185 + + + + + + +
        .collect(
+ +186 + + + + + + +
            HashMap::new,
+ +187 + + + + + + +
            (result, metadataBLOBPayloadEntry) -> {
+ +188 + + + + + + +
              final Consumer<AAGUID> appendToAaguidEntry =
+ +189 + + + + + + +
                  aaguid ->
+ +190 + + + + + + +
                      result
+ +191 + + +1 + +1. lambda$buildAaguidMap$9 : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$9 → KILLED
+ +
+
+
                          .computeIfAbsent(aaguid, o -> new HashSet<>())
+ +192 + + + + + + +
                          .add(metadataBLOBPayloadEntry);
+ +193 + + + + + + +
              metadataBLOBPayloadEntry
+ +194 + + + + + + +
                  .getAaguid()
+ +195 + + +2 + +1. lambda$buildAaguidMap$11 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$11 → SURVIVED
+2. lambda$buildAaguidMap$11 : negated conditional → KILLED
+ +
+
+
                  .filter(aaguid -> !aaguid.isZero())
+ +196 + + +1 + +1. lambda$buildAaguidMap$13 : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
                  .ifPresent(appendToAaguidEntry);
+ +197 + + + + + + +
              metadataBLOBPayloadEntry
+ +198 + + + + + + +
                  .getMetadataStatement()
+ +199 + + + + + + +
                  .flatMap(MetadataStatement::getAaguid)
+ +200 + + +2 + +1. lambda$buildAaguidMap$12 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$12 → SURVIVED
+2. lambda$buildAaguidMap$12 : negated conditional → SURVIVED
+ +
+
+
                  .filter(aaguid -> !aaguid.isZero())
+ +201 + + +1 + +1. lambda$buildAaguidMap$13 : removed call to java/util/Optional::ifPresent → SURVIVED
+ +
+
+
                  .ifPresent(appendToAaguidEntry);
+ +202 + + + + + + +
            },
+ +203 + + + + + + +
            (mapA, mapB) -> {
+ +204 + + + + + + +
              for (Map.Entry<AAGUID, HashSet<MetadataBLOBPayloadEntry>> e : mapB.entrySet()) {
+ +205 + + + + + + +
                mapA.merge(
+ +206 + + + + + + +
                    e.getKey(),
+ +207 + + + + + + +
                    e.getValue(),
+ +208 + + + + + + +
                    (entriesA, entriesB) -> {
+ +209 + + + + + + +
                      entriesA.addAll(entriesB);
+ +210 + + +1 + +1. lambda$buildAaguidMap$14 : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$14 → NO_COVERAGE
+ +
+
+
                      return entriesA;
+ +211 + + + + + + +
                    });
+ +212 + + + + + + +
              }
+ +213 + + + + + + +
            });
+ +214 + + + + + + +
  }
+ +215 + + + + + + +
+ +216 + + + + + + +
  public static FidoMetadataServiceBuilder.Step1 builder() {
+ +217 + + +1 + +1. builder : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::builder → KILLED
+ +
+
+
    return new FidoMetadataServiceBuilder.Step1();
+ +218 + + + + + + +
  }
+ +219 + + + + + + +
+ +220 + + + + + + +
  @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
+ +221 + + + + + + +
  public static class FidoMetadataServiceBuilder {
+ +222 + + + + + + +
    @NonNull private final MetadataBLOBPayload blob;
+ +223 + + + + + + +
+ +224 + + + + + + +
    private Predicate<MetadataBLOBPayloadEntry> prefilter = Filters.notRevoked();
+ +225 + + + + + + +
    private Predicate<AuthenticatorToBeFiltered> filter = Filters.noAttestationKeyCompromise();
+ +226 + + + + + + +
    private CertStore certStore = null;
+ +227 + + + + + + +
+ +228 + + + + + + +
    public static class Step1 {
+ +229 + + + + + + +
      /**
+ +230 + + + + + + +
       * Use payload of the given <code>blob</code> as the data source.
+ +231 + + + + + + +
       *
+ +232 + + + + + + +
       * <p>The {@link FidoMetadataDownloader#loadCachedBlob()} method returns a value suitable for
+ +233 + + + + + + +
       * use here.
+ +234 + + + + + + +
       *
+ +235 + + + + + + +
       * <p>This is an alias of <code>useBlob(blob.getPayload()</code>.
+ +236 + + + + + + +
       *
+ +237 + + + + + + +
       * @see FidoMetadataDownloader#loadCachedBlob()
+ +238 + + + + + + +
       * @see #useBlob(MetadataBLOBPayload)
+ +239 + + + + + + +
       */
+ +240 + + +1 + +1. useBlob : negated conditional → KILLED
+ +
+
+
      public FidoMetadataServiceBuilder useBlob(@NonNull MetadataBLOB blob) {
+ +241 + + +1 + +1. useBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1::useBlob → KILLED
+ +
+
+
        return useBlob(blob.getPayload());
+ +242 + + + + + + +
      }
+ +243 + + + + + + +
+ +244 + + + + + + +
      /**
+ +245 + + + + + + +
       * Use the given <code>blobPayload</code> as the data source.
+ +246 + + + + + + +
       *
+ +247 + + + + + + +
       * <p>The {@link FidoMetadataDownloader#loadCachedBlob()} method returns a value whose {@link
+ +248 + + + + + + +
       * MetadataBLOB#getPayload() .getPayload()} result is suitable for use here.
+ +249 + + + + + + +
       *
+ +250 + + + + + + +
       * @see FidoMetadataDownloader#loadCachedBlob()
+ +251 + + + + + + +
       * @see #useBlob(MetadataBLOB)
+ +252 + + + + + + +
       */
+ +253 + + +1 + +1. useBlob : negated conditional → KILLED
+ +
+
+
      public FidoMetadataServiceBuilder useBlob(@NonNull MetadataBLOBPayload blobPayload) {
+ +254 + + +1 + +1. useBlob : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1::useBlob → KILLED
+ +
+
+
        return new FidoMetadataServiceBuilder(blobPayload);
+ +255 + + + + + + +
      }
+ +256 + + + + + + +
    }
+ +257 + + + + + + +
+ +258 + + + + + + +
    /**
+ +259 + + + + + + +
     * Set a first-stage filter for which metadata entries to include in the data source.
+ +260 + + + + + + +
     *
+ +261 + + + + + + +
     * <p>This prefilter is executed once for each metadata entry during initial construction of a
+ +262 + + + + + + +
     * {@link FidoMetadataService} instance.
+ +263 + + + + + + +
     *
+ +264 + + + + + + +
     * <p>The default is {@link Filters#notRevoked() Filters.notRevoked()}. Setting a different
+ +265 + + + + + + +
     * filter overrides this default; to preserve the "not revoked" condition in addition to the new
+ +266 + + + + + + +
     * filter, you must explicitly include the condition in the few filter. For example, by using
+ +267 + + + + + + +
     * {@link Filters#allOf(Predicate[]) Filters.allOf(Predicate...)}.
+ +268 + + + + + + +
     *
+ +269 + + + + + + +
     * @param prefilter a {@link Predicate} which returns <code>true</code> for metadata entries to
+ +270 + + + + + + +
     *     include in the data source.
+ +271 + + + + + + +
     * @see #filter(Predicate)
+ +272 + + + + + + +
     * @see Filters#allOf(Predicate[])
+ +273 + + + + + + +
     */
+ +274 + + + + + + +
    public FidoMetadataServiceBuilder prefilter(
+ +275 + + +1 + +1. prefilter : negated conditional → KILLED
+ +
+
+
        @NonNull Predicate<MetadataBLOBPayloadEntry> prefilter) {
+ +276 + + + + + + +
      this.prefilter = prefilter;
+ +277 + + +1 + +1. prefilter : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::prefilter → KILLED
+ +
+
+
      return this;
+ +278 + + + + + + +
    }
+ +279 + + + + + + +
+ +280 + + + + + + +
    /**
+ +281 + + + + + + +
     * Set a filter for which metadata entries to allow for a given authenticator during credential
+ +282 + + + + + + +
     * registration and metadata lookup.
+ +283 + + + + + + +
     *
+ +284 + + + + + + +
     * <p>This filter is executed during each execution of {@link #findEntries(List, AAGUID)}, its
+ +285 + + + + + + +
     * overloads, and {@link #findTrustRoots(List, Optional)}.
+ +286 + + + + + + +
     *
+ +287 + + + + + + +
     * <p>The default is {@link Filters#noAttestationKeyCompromise()
+ +288 + + + + + + +
     * Filters.noAttestationKeyCompromise()}. Setting a different filter overrides this default; to
+ +289 + + + + + + +
     * preserve this condition in addition to the new filter, you must explicitly include the
+ +290 + + + + + + +
     * condition in the few filter. For example, by using {@link Filters#allOf(Predicate[])
+ +291 + + + + + + +
     * Filters.allOf(Predicate...)}.
+ +292 + + + + + + +
     *
+ +293 + + + + + + +
     * <p>Note: Returning <code>true</code> in the filter predicate does not automatically make the
+ +294 + + + + + + +
     * authenticator trusted, as its attestation certificate must also correctly chain to a trusted
+ +295 + + + + + + +
     * attestation root. Rather, returning <code>true</code> in the filter predicate allows the
+ +296 + + + + + + +
     * corresponding metadata entry to be used for further trust assessment for that authenticator,
+ +297 + + + + + + +
     * while returning <code>false</code> eliminates the metadata entry (and thus any associated
+ +298 + + + + + + +
     * trust roots) for the ongoing query.
+ +299 + + + + + + +
     *
+ +300 + + + + + + +
     * @param filter a {@link Predicate} which returns <code>true</code> for metadata entries to
+ +301 + + + + + + +
     *     allow for the corresponding authenticator during credential registration and metadata
+ +302 + + + + + + +
     *     lookup.
+ +303 + + + + + + +
     * @see #prefilter(Predicate)
+ +304 + + + + + + +
     * @see AuthenticatorToBeFiltered
+ +305 + + + + + + +
     * @see Filters#allOf(Predicate[])
+ +306 + + + + + + +
     */
+ +307 + + + + + + +
    public FidoMetadataServiceBuilder filter(
+ +308 + + +1 + +1. filter : negated conditional → KILLED
+ +
+
+
        @NonNull Predicate<FidoMetadataService.Filters.AuthenticatorToBeFiltered> filter) {
+ +309 + + + + + + +
      this.filter = filter;
+ +310 + + +1 + +1. filter : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::filter → KILLED
+ +
+
+
      return this;
+ +311 + + + + + + +
    }
+ +312 + + + + + + +
+ +313 + + + + + + +
    /**
+ +314 + + + + + + +
     * Set a {@link CertStore} of additional CRLs and/or intermediate certificates to use while
+ +315 + + + + + + +
     * validating attestation certificate paths.
+ +316 + + + + + + +
     *
+ +317 + + + + + + +
     * <p>This setting is most likely useful for tests.
+ +318 + + + + + + +
     *
+ +319 + + + + + + +
     * @param certStore a {@link CertStore} of additional CRLs and/or intermediate certificates to
+ +320 + + + + + + +
     *     use while validating attestation certificate paths.
+ +321 + + + + + + +
     */
+ +322 + + +1 + +1. certStore : negated conditional → KILLED
+ +
+
+
    public FidoMetadataServiceBuilder certStore(@NonNull CertStore certStore) {
+ +323 + + + + + + +
      this.certStore = certStore;
+ +324 + + +1 + +1. certStore : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::certStore → KILLED
+ +
+
+
      return this;
+ +325 + + + + + + +
    }
+ +326 + + + + + + +
+ +327 + + + + + + +
    public FidoMetadataService build()
+ +328 + + + + + + +
        throws CertPathValidatorException,
+ +329 + + + + + + +
            InvalidAlgorithmParameterException,
+ +330 + + + + + + +
            Base64UrlException,
+ +331 + + + + + + +
            DigestException,
+ +332 + + + + + + +
            FidoMetadataDownloaderException,
+ +333 + + + + + + +
            CertificateException,
+ +334 + + + + + + +
            UnexpectedLegalHeader,
+ +335 + + + + + + +
            IOException,
+ +336 + + + + + + +
            NoSuchAlgorithmException,
+ +337 + + + + + + +
            SignatureException,
+ +338 + + + + + + +
            InvalidKeyException {
+ +339 + + +1 + +1. build : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::build → KILLED
+ +
+
+
      return new FidoMetadataService(blob, prefilter, filter, certStore);
+ +340 + + + + + + +
    }
+ +341 + + + + + + +
  }
+ +342 + + + + + + +
+ +343 + + + + + + +
  /**
+ +344 + + + + + + +
   * Preconfigured filters and utilities for combining filters. See the {@link
+ +345 + + + + + + +
   * FidoMetadataServiceBuilder#prefilter(Predicate) prefilter} and {@link
+ +346 + + + + + + +
   * FidoMetadataServiceBuilder#filter(Predicate) filter} settings.
+ +347 + + + + + + +
   *
+ +348 + + + + + + +
   * @see FidoMetadataServiceBuilder#prefilter(Predicate)
+ +349 + + + + + + +
   * @see FidoMetadataServiceBuilder#filter(Predicate)
+ +350 + + + + + + +
   */
+ +351 + + + + + + +
  public static class Filters {
+ +352 + + + + + + +
+ +353 + + + + + + +
    /**
+ +354 + + + + + + +
     * Combine a set of filters into a filter that requires inputs to satisfy ALL of those filters.
+ +355 + + + + + + +
     *
+ +356 + + + + + + +
     * <p>If <code>filters</code> is empty, then all inputs will satisfy the resulting filter.
+ +357 + + + + + + +
     *
+ +358 + + + + + + +
     * @param filters A set of filters.
+ +359 + + + + + + +
     * @return A filter which only accepts inputs that satisfy ALL of the given <code>
+ +360 + + + + + + +
     *     filters</code>.
+ +361 + + + + + + +
     */
+ +362 + + + + + + +
    @SafeVarargs
+ +363 + + + + + + +
    public static <T> Predicate<T> allOf(Predicate<T>... filters) {
+ +364 + + +5 + +1. lambda$allOf$0 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$0 → NO_COVERAGE
+2. lambda$allOf$0 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$0 → NO_COVERAGE
+3. allOf : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::allOf → NO_COVERAGE
+4. lambda$allOf$1 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$1 → NO_COVERAGE
+5. lambda$allOf$1 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$1 → NO_COVERAGE
+ +
+
+
      return (entry) -> Stream.of(filters).allMatch(filter -> filter.test(entry));
+ +365 + + + + + + +
    }
+ +366 + + + + + + +
+ +367 + + + + + + +
    /**
+ +368 + + + + + + +
     * Include any metadata entry whose {@link MetadataBLOBPayloadEntry#getStatusReports()
+ +369 + + + + + + +
     * statusReports} array contains no entry with {@link AuthenticatorStatus#REVOKED REVOKED}
+ +370 + + + + + + +
     * status.
+ +371 + + + + + + +
     *
+ +372 + + + + + + +
     * @see AuthenticatorStatus#REVOKED
+ +373 + + + + + + +
     */
+ +374 + + + + + + +
    public static Predicate<MetadataBLOBPayloadEntry> notRevoked() {
+ +375 + + +1 + +1. notRevoked : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::notRevoked → KILLED
+ +
+
+
      return (entry) ->
+ +376 + + +2 + +1. lambda$notRevoked$3 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$3 → KILLED
+2. lambda$notRevoked$3 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$3 → KILLED
+ +
+
+
          entry.getStatusReports().stream()
+ +377 + + + + + + +
              .noneMatch(
+ +378 + + +2 + +1. lambda$notRevoked$2 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$2 → KILLED
+2. lambda$notRevoked$2 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$2 → KILLED
+ +
+
+
                  statusReport -> AuthenticatorStatus.REVOKED.equals(statusReport.getStatus()));
+ +379 + + + + + + +
    }
+ +380 + + + + + + +
+ +381 + + + + + + +
    /**
+ +382 + + + + + + +
     * Accept any authenticator whose matched metadata entry does NOT indicate a compromised
+ +383 + + + + + + +
     * attestation key.
+ +384 + + + + + + +
     *
+ +385 + + + + + + +
     * <p>A metadata entry indicates a compromised attestation key if any of its {@link
+ +386 + + + + + + +
     * MetadataBLOBPayloadEntry#getStatusReports() statusReports} entries has {@link
+ +387 + + + + + + +
     * AuthenticatorStatus#ATTESTATION_KEY_COMPROMISE ATTESTATION_KEY_COMPROMISE} status and either
+ +388 + + + + + + +
     * an empty {@link StatusReport#getCertificate() certificate} field or a {@link
+ +389 + + + + + + +
     * StatusReport#getCertificate() certificate} whose public key appears in the authenticator's
+ +390 + + + + + + +
     * {@link AuthenticatorToBeFiltered#getAttestationCertificateChain() attestation certificate
+ +391 + + + + + + +
     * chain}.
+ +392 + + + + + + +
     *
+ +393 + + + + + + +
     * @see AuthenticatorStatus#ATTESTATION_KEY_COMPROMISE
+ +394 + + + + + + +
     */
+ +395 + + + + + + +
    public static Predicate<AuthenticatorToBeFiltered> noAttestationKeyCompromise() {
+ +396 + + +1 + +1. noAttestationKeyCompromise : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::noAttestationKeyCompromise → KILLED
+ +
+
+
      return (params) ->
+ +397 + + +2 + +1. lambda$noAttestationKeyCompromise$7 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$7 → KILLED
+2. lambda$noAttestationKeyCompromise$7 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$7 → KILLED
+ +
+
+
          params.getMetadataEntry().getStatusReports().stream()
+ +398 + + + + + + +
              .filter(
+ +399 + + + + + + +
                  statusReport ->
+ +400 + + +2 + +1. lambda$noAttestationKeyCompromise$4 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$4 → KILLED
+2. lambda$noAttestationKeyCompromise$4 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$4 → KILLED
+ +
+
+
                      AuthenticatorStatus.ATTESTATION_KEY_COMPROMISE.equals(
+ +401 + + + + + + +
                          statusReport.getStatus()))
+ +402 + + + + + + +
              .noneMatch(
+ +403 + + + + + + +
                  statusReport ->
+ +404 + + +2 + +1. lambda$noAttestationKeyCompromise$6 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$6 → SURVIVED
+2. lambda$noAttestationKeyCompromise$6 : negated conditional → KILLED
+ +
+
+
                      !statusReport.getCertificate().isPresent()
+ +405 + + + + + + +
                          || (params.getAttestationCertificateChain().stream()
+ +406 + + +1 + +1. lambda$noAttestationKeyCompromise$6 : negated conditional → KILLED
+ +
+
+
                              .anyMatch(
+ +407 + + + + + + +
                                  cert ->
+ +408 + + +2 + +1. lambda$noAttestationKeyCompromise$5 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$5 → SURVIVED
+2. lambda$noAttestationKeyCompromise$5 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$5 → KILLED
+ +
+
+
                                      Arrays.equals(
+ +409 + + + + + + +
                                          statusReport
+ +410 + + + + + + +
                                              .getCertificate()
+ +411 + + + + + + +
                                              .get()
+ +412 + + + + + + +
                                              .getPublicKey()
+ +413 + + + + + + +
                                              .getEncoded(),
+ +414 + + + + + + +
                                          cert.getPublicKey().getEncoded()))));
+ +415 + + + + + + +
    }
+ +416 + + + + + + +
+ +417 + + + + + + +
    /**
+ +418 + + + + + + +
     * This class encapsulates parameters for filtering authenticators in the {@link
+ +419 + + + + + + +
     * FidoMetadataServiceBuilder#filter(Predicate) filter} setting of {@link FidoMetadataService}.
+ +420 + + + + + + +
     */
+ +421 + + + + + + +
    @Value
+ +422 + + + + + + +
    @AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +423 + + + + + + +
    public static class AuthenticatorToBeFiltered {
+ +424 + + + + + + +
+ +425 + + + + + + +
      /**
+ +426 + + + + + + +
       * The attestation certificate chain from the <a
+ +427 + + + + + + +
       * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#attestation-statement">attestation
+ +428 + + + + + + +
       * statement</a> from an authenticator about ot be registered.
+ +429 + + + + + + +
       */
+ +430 + + + + + + +
      @NonNull List<X509Certificate> attestationCertificateChain;
+ +431 + + + + + + +
+ +432 + + + + + + +
      /**
+ +433 + + + + + + +
       * A metadata BLOB entry that matches the {@link #getAttestationCertificateChain()} and {@link
+ +434 + + + + + + +
       * #getAaguid()} in this same {@link AuthenticatorToBeFiltered} object.
+ +435 + + + + + + +
       */
+ +436 + + + + + + +
      @NonNull MetadataBLOBPayloadEntry metadataEntry;
+ +437 + + + + + + +
+ +438 + + + + + + +
      AAGUID aaguid;
+ +439 + + + + + + +
+ +440 + + + + + + +
      /**
+ +441 + + + + + + +
       * The AAGUID from the <a
+ +442 + + + + + + +
       * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attested-credential-data">attested
+ +443 + + + + + + +
       * credential data</a> of a credential about ot be registered.
+ +444 + + + + + + +
       *
+ +445 + + + + + + +
       * <p>This will not be present if the attested credential data contained an AAGUID of all
+ +446 + + + + + + +
       * zeroes.
+ +447 + + + + + + +
       */
+ +448 + + + + + + +
      public Optional<AAGUID> getAaguid() {
+ +449 + + +1 + +1. getAaguid : replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered::getAaguid → SURVIVED
+ +
+
+
        return Optional.ofNullable(aaguid);
+ +450 + + + + + + +
      }
+ +451 + + + + + + +
    }
+ +452 + + + + + + +
  }
+ +453 + + + + + + +
+ +454 + + + + + + +
  /**
+ +455 + + + + + + +
   * Look up metadata entries matching a given attestation certificate chain or AAGUID.
+ +456 + + + + + + +
   *
+ +457 + + + + + + +
   * @param attestationCertificateChain an attestation certificate chain, presumably from a WebAuthn
+ +458 + + + + + + +
   *     attestation statement.
+ +459 + + + + + + +
   * @param aaguid the AAGUID of the authenticator to look up, if available.
+ +460 + + + + + + +
   * @return All metadata entries which satisfy ALL of the following:
+ +461 + + + + + + +
   *     <ul>
+ +462 + + + + + + +
   *       <li>It satisfies the {@link FidoMetadataServiceBuilder#prefilter(Predicate) prefilter}.
+ +463 + + + + + + +
   *       <li>It satisfies AT LEAST ONE of the following:
+ +464 + + + + + + +
   *           <ul>
+ +465 + + + + + + +
   *             <li><code>_aaguid</code> is present and equals the {@link
+ +466 + + + + + + +
   *                 MetadataBLOBPayloadEntry#getAaguid() AAGUID} of the metadata entry.
+ +467 + + + + + + +
   *             <li><code>_aaguid</code> is present and equals the {@link
+ +468 + + + + + + +
   *                 MetadataStatement#getAaguid() AAGUID} of the {@link
+ +469 + + + + + + +
   *                 MetadataBLOBPayloadEntry#getMetadataStatement() metadata statement}, if any, in
+ +470 + + + + + + +
   *                 the metadata entry.
+ +471 + + + + + + +
   *             <li>The certificate subject key identifier of any certificate in <code>
+ +472 + + + + + + +
   *                 attestationCertificateChain</code> matches any element of {@link
+ +473 + + + + + + +
   *                 MetadataBLOBPayloadEntry#getAttestationCertificateKeyIdentifiers()
+ +474 + + + + + + +
   *                 attestationCertificateKeyIdentifiers} in the metadata entry.
+ +475 + + + + + + +
   *             <li>The certificate subject key identifier of any certificate in <code>
+ +476 + + + + + + +
   *                 attestationCertificateChain</code> matches any element of {@link
+ +477 + + + + + + +
   *                 MetadataStatement#getAttestationCertificateKeyIdentifiers()
+ +478 + + + + + + +
   *                 attestationCertificateKeyIdentifiers} in the {@link
+ +479 + + + + + + +
   *                 MetadataBLOBPayloadEntry#getMetadataStatement() metadata statement}, if any, in
+ +480 + + + + + + +
   *                 the metadata entry.
+ +481 + + + + + + +
   *           </ul>
+ +482 + + + + + + +
   *       <li>It satisfies the {@link FidoMetadataServiceBuilder#filter(Predicate) filter} together
+ +483 + + + + + + +
   *           with <code>attestationCertificateChain</code> and <code>_aaguid</code>.
+ +484 + + + + + + +
   *     </ul>
+ +485 + + + + + + +
   *     In the above, <code>_aaguid</code> is the first of the following that is {@link
+ +486 + + + + + + +
   *     Optional#isPresent() present} and not {@link AAGUID#isZero() zero}, or empty otherwise:
+ +487 + + + + + + +
   *     <ul>
+ +488 + + + + + + +
   *       <li>The <code>aaguid</code> argument.
+ +489 + + + + + + +
   *       <li>The value of the X.509 extension with OID 1.3.6.1.4.1.45724.1.1.4
+ +490 + + + + + + +
   *           (id-fido-gen-ce-aaguid), if any, in the first certificate in <code>
+ +491 + + + + + + +
   *                             attestationCertificateChain</code>, if any.
+ +492 + + + + + + +
   *     </ul>
+ +493 + + + + + + +
   *
+ +494 + + + + + + +
   * @see #findEntries(List)
+ +495 + + + + + + +
   * @see #findEntries(List, AAGUID)
+ +496 + + + + + + +
   */
+ +497 + + + + + + +
  public Set<MetadataBLOBPayloadEntry> findEntries(
+ +498 + + +1 + +1. findEntries : negated conditional → KILLED
+ +
+
+
      @NonNull final List<X509Certificate> attestationCertificateChain,
+ +499 + + +1 + +1. findEntries : negated conditional → KILLED
+ +
+
+
      @NonNull final Optional<AAGUID> aaguid) {
+ +500 + + + + + + +
+ +501 + + + + + + +
    final Set<String> certSubjectKeyIdentifiers =
+ +502 + + + + + + +
        attestationCertificateChain.stream()
+ +503 + + + + + + +
            .map(
+ +504 + + + + + + +
                cert -> {
+ +505 + + + + + + +
                  try {
+ +506 + + +1 + +1. lambda$findEntries$16 : replaced return value with "" for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$16 → KILLED
+ +
+
+
                    return new ByteArray(CertificateParser.computeSubjectKeyIdentifier(cert))
+ +507 + + + + + + +
                        .getHex();
+ +508 + + + + + + +
                  } catch (NoSuchAlgorithmException e) {
+ +509 + + + + + + +
                    throw new RuntimeException(
+ +510 + + + + + + +
                        "SHA-1 hash algorithm is not available in JCA context.", e);
+ +511 + + + + + + +
                  }
+ +512 + + + + + + +
                })
+ +513 + + + + + + +
            .collect(Collectors.toSet());
+ +514 + + + + + + +
+ +515 + + + + + + +
    final Optional<AAGUID> nonzeroAaguid =
+ +516 + + + + + + +
        OptionalUtil.orElseOptional(
+ +517 + + +2 + +1. lambda$findEntries$17 : negated conditional → KILLED
+2. lambda$findEntries$17 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$17 → KILLED
+ +
+
+
            aaguid.filter(a -> !a.isZero()),
+ +518 + + + + + + +
            () -> {
+ +519 + + + + + + +
              log.debug("findEntries: attempting to look up AAGUID from certificate");
+ +520 + + +1 + +1. lambda$findEntries$18 : negated conditional → KILLED
+ +
+
+
              if (attestationCertificateChain.isEmpty()) {
+ +521 + + + + + + +
                return Optional.empty();
+ +522 + + + + + + +
              } else {
+ +523 + + +1 + +1. lambda$findEntries$18 : replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$18 → SURVIVED
+ +
+
+
                return CertificateParser.parseFidoAaguidExtension(
+ +524 + + + + + + +
                        attestationCertificateChain.get(0))
+ +525 + + + + + + +
                    .map(ByteArray::new)
+ +526 + + + + + + +
                    .map(AAGUID::new);
+ +527 + + + + + + +
              }
+ +528 + + + + + + +
            });
+ +529 + + + + + + +
+ +530 + + + + + + +
    log.debug(
+ +531 + + + + + + +
        "findEntries(certSubjectKeyIdentifiers = {}, aaguid = {}, nonzeroAaguid= {})",
+ +532 + + + + + + +
        certSubjectKeyIdentifiers,
+ +533 + + + + + + +
        aaguid,
+ +534 + + + + + + +
        nonzeroAaguid);
+ +535 + + + + + + +
+ +536 + + + + + + +
    final Set<MetadataBLOBPayloadEntry> result =
+ +537 + + + + + + +
        Stream.concat(
+ +538 + + + + + + +
                nonzeroAaguid
+ +539 + + + + + + +
                    .map(prefilteredEntriesByAaguid::get)
+ +540 + + + + + + +
                    .map(Collection::stream)
+ +541 + + + + + + +
                    .orElseGet(Stream::empty),
+ +542 + + + + + + +
                certSubjectKeyIdentifiers.stream()
+ +543 + + + + + + +
                    .flatMap(
+ +544 + + + + + + +
                        cski ->
+ +545 + + + + + + +
                            Optional.ofNullable(
+ +546 + + + + + + +
                                    prefilteredEntriesByCertificateKeyIdentifier.get(cski))
+ +547 + + + + + + +
                                .map(Collection::stream)
+ +548 + + +1 + +1. lambda$findEntries$19 : replaced return value with Stream.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$19 → KILLED
+ +
+
+
                                .orElseGet(Stream::empty)))
+ +549 + + + + + + +
            .filter(
+ +550 + + + + + + +
                metadataBLOBPayloadEntry ->
+ +551 + + +2 + +1. lambda$findEntries$20 : replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$20 → KILLED
+2. lambda$findEntries$20 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$20 → KILLED
+ +
+
+
                    this.filter.test(
+ +552 + + + + + + +
                        new AuthenticatorToBeFiltered(
+ +553 + + + + + + +
                            attestationCertificateChain,
+ +554 + + + + + + +
                            metadataBLOBPayloadEntry,
+ +555 + + + + + + +
                            nonzeroAaguid.orElse(null))))
+ +556 + + + + + + +
            .collect(Collectors.toSet());
+ +557 + + + + + + +
+ +558 + + + + + + +
    log.debug(
+ +559 + + + + + + +
        "findEntries(certSubjectKeyIdentifiers = {}, aaguid = {}) => {} matches",
+ +560 + + + + + + +
        certSubjectKeyIdentifiers,
+ +561 + + + + + + +
        aaguid,
+ +562 + + + + + + +
        result.size());
+ +563 + + +1 + +1. findEntries : replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → KILLED
+ +
+
+
    return result;
+ +564 + + + + + + +
  }
+ +565 + + + + + + +
+ +566 + + + + + + +
  /**
+ +567 + + + + + + +
   * Alias of <code>findEntries(attestationCertificateChain, Optional.empty())</code>.
+ +568 + + + + + + +
   *
+ +569 + + + + + + +
   * @see #findEntries(List, Optional)
+ +570 + + + + + + +
   */
+ +571 + + + + + + +
  public Set<MetadataBLOBPayloadEntry> findEntries(
+ +572 + + +1 + +1. findEntries : negated conditional → NO_COVERAGE
+ +
+
+
      @NonNull List<X509Certificate> attestationCertificateChain) {
+ +573 + + +1 + +1. findEntries : replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → NO_COVERAGE
+ +
+
+
    return findEntries(attestationCertificateChain, Optional.empty());
+ +574 + + + + + + +
  }
+ +575 + + + + + + +
+ +576 + + + + + + +
  /**
+ +577 + + + + + + +
   * Alias of <code>findEntries(attestationCertificateChain, Optional.of(aaguid))</code>.
+ +578 + + + + + + +
   *
+ +579 + + + + + + +
   * @see #findEntries(List, Optional)
+ +580 + + + + + + +
   */
+ +581 + + + + + + +
  public Set<MetadataBLOBPayloadEntry> findEntries(
+ +582 + + +2 + +1. findEntries : negated conditional → KILLED
+2. findEntries : negated conditional → KILLED
+ +
+
+
      @NonNull List<X509Certificate> attestationCertificateChain, @NonNull AAGUID aaguid) {
+ +583 + + +1 + +1. findEntries : replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → KILLED
+ +
+
+
    return findEntries(attestationCertificateChain, Optional.of(aaguid));
+ +584 + + + + + + +
  }
+ +585 + + + + + + +
+ +586 + + + + + + +
  /**
+ +587 + + + + + + +
   * Find metadata entries matching the credential represented by <code>registrationResult</code>.
+ +588 + + + + + + +
   *
+ +589 + + + + + + +
   * <p>This is an alias of:
+ +590 + + + + + + +
   *
+ +591 + + + + + + +
   * <pre>
+ +592 + + + + + + +
   * registrationResult.getAttestationTrustPath()
+ +593 + + + + + + +
   *   .map(atp -&gt; this.findEntries(atp, new AAGUID(registrationResult.getAaguid())))
+ +594 + + + + + + +
   *   .orElseGet(Collections::emptySet)
+ +595 + + + + + + +
   * </pre>
+ +596 + + + + + + +
   *
+ +597 + + + + + + +
   * @see #findEntries(List, Optional)
+ +598 + + + + + + +
   */
+ +599 + + +1 + +1. findEntries : negated conditional → NO_COVERAGE
+ +
+
+
  public Set<MetadataBLOBPayloadEntry> findEntries(@NonNull RegistrationResult registrationResult) {
+ +600 + + +1 + +1. findEntries : replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → NO_COVERAGE
+ +
+
+
    return registrationResult
+ +601 + + + + + + +
        .getAttestationTrustPath()
+ +602 + + +1 + +1. lambda$findEntries$21 : replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$21 → NO_COVERAGE
+ +
+
+
        .map(atp -> findEntries(atp, new AAGUID(registrationResult.getAaguid())))
+ +603 + + + + + + +
        .orElseGet(Collections::emptySet);
+ +604 + + + + + + +
  }
+ +605 + + + + + + +
+ +606 + + + + + + +
  /**
+ +607 + + + + + + +
   * Find metadata entries matching the given AAGUID.
+ +608 + + + + + + +
   *
+ +609 + + + + + + +
   * @see #findEntries(List, Optional)
+ +610 + + + + + + +
   */
+ +611 + + +1 + +1. findEntries : negated conditional → KILLED
+ +
+
+
  public Set<MetadataBLOBPayloadEntry> findEntries(@NonNull AAGUID aaguid) {
+ +612 + + +1 + +1. findEntries : replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → SURVIVED
+ +
+
+
    return findEntries(Collections.emptyList(), aaguid);
+ +613 + + + + + + +
  }
+ +614 + + + + + + +
+ +615 + + + + + + +
  /**
+ +616 + + + + + + +
   * Retrieve metadata entries matching the given filter.
+ +617 + + + + + + +
   *
+ +618 + + + + + + +
   * <p>Note: The result MAY include fewer results than the number of times the <code>filter</code>
+ +619 + + + + + + +
   * returned <code>true</code>, because of possible duplication in the underlying data store.
+ +620 + + + + + + +
   *
+ +621 + + + + + + +
   * @param filter a {@link Predicate} which returns <code>true</code> for metadata entries to
+ +622 + + + + + + +
   *     include in the result.
+ +623 + + + + + + +
   * @return All metadata entries which satisfy the {@link
+ +624 + + + + + + +
   *     FidoMetadataServiceBuilder#prefilter(Predicate) prefilter} AND for which the <code>filter
+ +625 + + + + + + +
   *     </code> returns <code>true</code>.
+ +626 + + + + + + +
   * @see #findEntries(List, Optional)
+ +627 + + + + + + +
   */
+ +628 + + + + + + +
  public Set<MetadataBLOBPayloadEntry> findEntries(
+ +629 + + +1 + +1. findEntries : negated conditional → KILLED
+ +
+
+
      @NonNull Predicate<MetadataBLOBPayloadEntry> filter) {
+ +630 + + +1 + +1. findEntries : replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → KILLED
+ +
+
+
    return Stream.concat(
+ +631 + + + + + + +
            Stream.concat(
+ +632 + + + + + + +
                prefilteredEntriesByAaguid.values().stream().flatMap(Collection::stream),
+ +633 + + + + + + +
                prefilteredEntriesByCertificateKeyIdentifier.values().stream()
+ +634 + + + + + + +
                    .flatMap(Collection::stream)),
+ +635 + + + + + + +
            prefilteredUnindexedEntries.stream())
+ +636 + + + + + + +
        .filter(filter)
+ +637 + + + + + + +
        .collect(Collectors.toSet());
+ +638 + + + + + + +
  }
+ +639 + + + + + + +
+ +640 + + + + + + +
  @Override
+ +641 + + + + + + +
  public TrustRootsResult findTrustRoots(
+ +642 + + + + + + +
      List<X509Certificate> attestationCertificateChain, Optional<ByteArray> aaguid) {
+ +643 + + +1 + +1. findTrustRoots : replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::findTrustRoots → KILLED
+ +
+
+
    return TrustRootsResult.builder()
+ +644 + + + + + + +
        .trustRoots(
+ +645 + + + + + + +
            findEntries(attestationCertificateChain, aaguid.map(AAGUID::new)).stream()
+ +646 + + + + + + +
                .map(MetadataBLOBPayloadEntry::getMetadataStatement)
+ +647 + + + + + + +
                .flatMap(OptionalUtil::stream)
+ +648 + + + + + + +
                .flatMap(
+ +649 + + + + + + +
                    metadataStatement ->
+ +650 + + +1 + +1. lambda$findTrustRoots$22 : replaced return value with Stream.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findTrustRoots$22 → KILLED
+ +
+
+
                        metadataStatement.getAttestationRootCertificates().stream())
+ +651 + + + + + + +
                .collect(Collectors.toSet()))
+ +652 + + + + + + +
        .certStore(certStore)
+ +653 + + + + + + +
        .enableRevocationChecking(false)
+ +654 + + +1 + +1. lambda$findTrustRoots$23 : replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$findTrustRoots$23 → KILLED
+ +
+
+
        .policyTreeValidator(policyNode -> true)
+ +655 + + + + + + +
        .build();
+ +656 + + + + + + +
  }
+ +657 + + + + + + +
}

Mutations

103 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
104 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
105 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
131 + + + +

1.1
Location : ignoreInvalidUpdateAvailableAuthenticatorVersion
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::ignoreInvalidUpdateAvailableAuthenticatorVersion → KILLED

2.2
Location : ignoreInvalidUpdateAvailableAuthenticatorVersion
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::ignoreInvalidUpdateAvailableAuthenticatorVersion → KILLED

+
136 + + + +

1.1
Location : lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced Boolean return with True for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 → KILLED

2.2
Location : lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced Boolean return with False for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 → KILLED

+
139 + + + +

1.1
Location : lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0
Killed by : none
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 → SURVIVED

2.2
Location : lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 → KILLED

+
144 + + + +

1.1
Location : lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1
Killed by : com.yubico.fido.metadata.FidoMds3Spec
changed conditional boundary → KILLED

2.2
Location : lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced Boolean return with True for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 → KILLED

3.3
Location : lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
145 + + + +

1.1
Location : lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 → KILLED

2.2
Location : lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 → KILLED

+
150 + + + +

1.1
Location : buildCkiMap
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
152 + + + +

1.1
Location : buildCkiMap
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::buildCkiMap → KILLED

+
158 + + + +

1.1
Location : lambda$buildCkiMap$4
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$4 → KILLED

+
165 + + + +

1.1
Location : lambda$buildCkiMap$5
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$5 → KILLED

+
175 + + + +

1.1
Location : lambda$buildCkiMap$7
Killed by : none
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$7 → NO_COVERAGE

+
182 + + + +

1.1
Location : buildAaguidMap
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
184 + + + +

1.1
Location : buildAaguidMap
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::buildAaguidMap → KILLED

+
191 + + + +

1.1
Location : lambda$buildAaguidMap$9
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$9 → KILLED

+
195 + + + +

1.1
Location : lambda$buildAaguidMap$11
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

2.2
Location : lambda$buildAaguidMap$11
Killed by : none
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$11 → SURVIVED

+
196 + + + +

1.1
Location : lambda$buildAaguidMap$13
Killed by : com.yubico.fido.metadata.FidoMds3Spec
removed call to java/util/Optional::ifPresent → KILLED

+
200 + + + +

1.1
Location : lambda$buildAaguidMap$12
Killed by : none
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$12 → SURVIVED

2.2
Location : lambda$buildAaguidMap$12
Killed by : none
negated conditional → SURVIVED

+
201 + + + +

1.1
Location : lambda$buildAaguidMap$13
Killed by : none
removed call to java/util/Optional::ifPresent → SURVIVED

+
210 + + + +

1.1
Location : lambda$buildAaguidMap$14
Killed by : none
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$14 → NO_COVERAGE

+
217 + + + +

1.1
Location : builder
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::builder → KILLED

+
240 + + + +

1.1
Location : useBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
241 + + + +

1.1
Location : useBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1::useBlob → KILLED

+
253 + + + +

1.1
Location : useBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
254 + + + +

1.1
Location : useBlob
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1::useBlob → KILLED

+
275 + + + +

1.1
Location : prefilter
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
277 + + + +

1.1
Location : prefilter
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::prefilter → KILLED

+
308 + + + +

1.1
Location : filter
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
310 + + + +

1.1
Location : filter
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::filter → KILLED

+
322 + + + +

1.1
Location : certStore
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
324 + + + +

1.1
Location : certStore
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::certStore → KILLED

+
339 + + + +

1.1
Location : build
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::build → KILLED

+
364 + + + +

1.1
Location : lambda$allOf$0
Killed by : none
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$0 → NO_COVERAGE

2.2
Location : lambda$allOf$0
Killed by : none
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$0 → NO_COVERAGE

3.3
Location : allOf
Killed by : none
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::allOf → NO_COVERAGE

4.4
Location : lambda$allOf$1
Killed by : none
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$1 → NO_COVERAGE

5.5
Location : lambda$allOf$1
Killed by : none
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$1 → NO_COVERAGE

+
375 + + + +

1.1
Location : notRevoked
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::notRevoked → KILLED

+
376 + + + +

1.1
Location : lambda$notRevoked$3
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$3 → KILLED

2.2
Location : lambda$notRevoked$3
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$3 → KILLED

+
378 + + + +

1.1
Location : lambda$notRevoked$2
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$2 → KILLED

2.2
Location : lambda$notRevoked$2
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$2 → KILLED

+
396 + + + +

1.1
Location : noAttestationKeyCompromise
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::noAttestationKeyCompromise → KILLED

+
397 + + + +

1.1
Location : lambda$noAttestationKeyCompromise$7
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$7 → KILLED

2.2
Location : lambda$noAttestationKeyCompromise$7
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$7 → KILLED

+
400 + + + +

1.1
Location : lambda$noAttestationKeyCompromise$4
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$4 → KILLED

2.2
Location : lambda$noAttestationKeyCompromise$4
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$4 → KILLED

+
404 + + + +

1.1
Location : lambda$noAttestationKeyCompromise$6
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

2.2
Location : lambda$noAttestationKeyCompromise$6
Killed by : none
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$6 → SURVIVED

+
406 + + + +

1.1
Location : lambda$noAttestationKeyCompromise$6
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
408 + + + +

1.1
Location : lambda$noAttestationKeyCompromise$5
Killed by : none
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$5 → SURVIVED

2.2
Location : lambda$noAttestationKeyCompromise$5
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$5 → KILLED

+
449 + + + +

1.1
Location : getAaguid
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered::getAaguid → SURVIVED

+
498 + + + +

1.1
Location : findEntries
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
499 + + + +

1.1
Location : findEntries
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
506 + + + +

1.1
Location : lambda$findEntries$16
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with "" for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$16 → KILLED

+
517 + + + +

1.1
Location : lambda$findEntries$17
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

2.2
Location : lambda$findEntries$17
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$17 → KILLED

+
520 + + + +

1.1
Location : lambda$findEntries$18
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
523 + + + +

1.1
Location : lambda$findEntries$18
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$18 → SURVIVED

+
548 + + + +

1.1
Location : lambda$findEntries$19
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Stream.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$19 → KILLED

+
551 + + + +

1.1
Location : lambda$findEntries$20
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$20 → KILLED

2.2
Location : lambda$findEntries$20
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$20 → KILLED

+
563 + + + +

1.1
Location : findEntries
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → KILLED

+
572 + + + +

1.1
Location : findEntries
Killed by : none
negated conditional → NO_COVERAGE

+
573 + + + +

1.1
Location : findEntries
Killed by : none
replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → NO_COVERAGE

+
582 + + + +

1.1
Location : findEntries
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

2.2
Location : findEntries
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
583 + + + +

1.1
Location : findEntries
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → KILLED

+
599 + + + +

1.1
Location : findEntries
Killed by : none
negated conditional → NO_COVERAGE

+
600 + + + +

1.1
Location : findEntries
Killed by : none
replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → NO_COVERAGE

+
602 + + + +

1.1
Location : lambda$findEntries$21
Killed by : none
replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$21 → NO_COVERAGE

+
611 + + + +

1.1
Location : findEntries
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
612 + + + +

1.1
Location : findEntries
Killed by : none
replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → SURVIVED

+
629 + + + +

1.1
Location : findEntries
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
630 + + + +

1.1
Location : findEntries
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries → KILLED

+
643 + + + +

1.1
Location : findTrustRoots
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::findTrustRoots → KILLED

+
650 + + + +

1.1
Location : lambda$findTrustRoots$22
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Stream.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findTrustRoots$22 → KILLED

+
654 + + + +

1.1
Location : lambda$findTrustRoots$23
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$findTrustRoots$23 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/JacksonCodecs.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/JacksonCodecs.java.html new file mode 100644 index 000000000..01080cca2 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/JacksonCodecs.java.html @@ -0,0 +1,241 @@ + + + + + + + + + +

JacksonCodecs.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.databind.DeserializationFeature;
+ +4 + + + + + + +
import com.fasterxml.jackson.databind.ObjectMapper;
+ +5 + + + + + + +
+ +6 + + + + + + +
class JacksonCodecs {
+ +7 + + + + + + +
+ +8 + + + + + + +
  static ObjectMapper jsonWithDefaultEnums() {
+ +9 + + +1 + +1. jsonWithDefaultEnums : replaced return value with null for com/yubico/fido/metadata/JacksonCodecs::jsonWithDefaultEnums → KILLED
+ +
+
+
    return com.yubico.internal.util.JacksonCodecs.json()
+ +10 + + + + + + +
        .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE, true);
+ +11 + + + + + + +
  }
+ +12 + + + + + + +
}

Mutations

9 + + + +

1.1
Location : jsonWithDefaultEnums
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with null for com/yubico/fido/metadata/JacksonCodecs::jsonWithDefaultEnums → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataBLOBHeader.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataBLOBHeader.java.html new file mode 100644 index 000000000..56f37d28a --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataBLOBHeader.java.html @@ -0,0 +1,1490 @@ + + + + + + + + + +

MetadataBLOBHeader.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+ +4 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+ +5 + + + + + + +
import java.net.URL;
+ +6 + + + + + + +
import java.security.cert.X509Certificate;
+ +7 + + + + + + +
import java.util.List;
+ +8 + + + + + + +
import java.util.Optional;
+ +9 + + + + + + +
import lombok.Builder;
+ +10 + + + + + + +
import lombok.NonNull;
+ +11 + + + + + + +
import lombok.Value;
+ +12 + + + + + + +
import lombok.extern.jackson.Jacksonized;
+ +13 + + + + + + +
+ +14 + + + + + + +
/**
+ +15 + + + + + + +
 * The metadata BLOB is a JSON Web Token (see [<a
+ +16 + + + + + + +
 * href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biblio-jwt">JWT</a>]
+ +17 + + + + + + +
 * and [<a
+ +18 + + + + + + +
 * href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biblio-jws">JWS</a>]).
+ +19 + + + + + + +
 *
+ +20 + + + + + + +
 * <p>This type represents the contents of the JWT header.
+ +21 + + + + + + +
 *
+ +22 + + + + + + +
 * @see <a
+ +23 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob">FIDO
+ +24 + + + + + + +
 *     Metadata Service §3.1.7. Metadata BLOB</a>
+ +25 + + + + + + +
 * @see <a href="https://datatracker.ietf.org/doc/html/rfc7519">RFC 7519: JSON Web Token (JWT)</a>
+ +26 + + + + + + +
 */
+ +27 + + + + + + +
@Value
+ +28 + + + + + + +
@Builder(toBuilder = true)
+ +29 + + + + + + +
@Jacksonized
+ +30 + + + + + + +
public class MetadataBLOBHeader {
+ +31 + + + + + + +
+ +32 + + + + + + +
  /**
+ +33 + + + + + + +
   * @see <a href="https://datatracker.ietf.org/doc/html/rfc7519#section-5.1">RFC 7519 §5.1. "typ"
+ +34 + + + + + + +
   *     (Type) Header Parameter</a>
+ +35 + + + + + + +
   */
+ +36 + + + + + + +
  String typ;
+ +37 + + + + + + +
+ +38 + + + + + + +
  /**
+ +39 + + + + + + +
   * @see <a href="https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.1">RFC 7515 §4.1.1.
+ +40 + + + + + + +
   *     "alg" (Algorithm) Header Parameter</a>
+ +41 + + + + + + +
   */
+ +42 + + + + + + +
  @NonNull String alg;
+ +43 + + + + + + +
+ +44 + + + + + + +
  /**
+ +45 + + + + + + +
   * @see <a href="https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.5">RFC 7515 §4.1.5.
+ +46 + + + + + + +
   *     "x5u" (X.509 URL) Header Parameter</a>
+ +47 + + + + + + +
   */
+ +48 + + + + + + +
  URL x5u;
+ +49 + + + + + + +
+ +50 + + + + + + +
  /**
+ +51 + + + + + + +
   * @see <a href="https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.6">RFC 7515 §4.1.6.
+ +52 + + + + + + +
   *     "x5c" (X.509 Certificate Chain) Header Parameter</a>
+ +53 + + + + + + +
   */
+ +54 + + + + + + +
  @JsonDeserialize(contentConverter = CertFromBase64Converter.class)
+ +55 + + + + + + +
  @JsonSerialize(contentConverter = CertToBase64Converter.class)
+ +56 + + + + + + +
  List<X509Certificate> x5c;
+ +57 + + + + + + +
+ +58 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
  private MetadataBLOBHeader(String typ, @NonNull String alg, URL x5u, List<X509Certificate> x5c) {
+ +59 + + + + + + +
    this.typ = typ;
+ +60 + + + + + + +
    this.alg = alg;
+ +61 + + + + + + +
    this.x5u = x5u;
+ +62 + + + + + + +
    this.x5c = x5c;
+ +63 + + + + + + +
+ +64 + + +2 + +1. <init> : negated conditional → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    if (typ != null && !typ.equals("JWT")) {
+ +65 + + + + + + +
      throw new IllegalArgumentException("Unsupported JWT type: " + typ);
+ +66 + + + + + + +
    }
+ +67 + + + + + + +
  }
+ +68 + + + + + + +
+ +69 + + + + + + +
  /**
+ +70 + + + + + + +
   * @see <a href="https://datatracker.ietf.org/doc/html/rfc7519#section-5.1">RFC 7519 §5.1. "typ"
+ +71 + + + + + + +
   *     (Type) Header Parameter</a>
+ +72 + + + + + + +
   */
+ +73 + + + + + + +
  public Optional<String> getTyp() {
+ +74 + + +1 + +1. getTyp : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getTyp → SURVIVED
+ +
+
+
    return Optional.ofNullable(typ);
+ +75 + + + + + + +
  }
+ +76 + + + + + + +
+ +77 + + + + + + +
  /**
+ +78 + + + + + + +
   * @see <a href="https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.5">RFC 7515 §4.1.5.
+ +79 + + + + + + +
   *     "x5u" (X.509 URL) Header Parameter</a>
+ +80 + + + + + + +
   */
+ +81 + + + + + + +
  public Optional<URL> getX5u() {
+ +82 + + +1 + +1. getX5u : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getX5u → KILLED
+ +
+
+
    return Optional.ofNullable(x5u);
+ +83 + + + + + + +
  }
+ +84 + + + + + + +
+ +85 + + + + + + +
  /**
+ +86 + + + + + + +
   * @see <a href="https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.6">RFC 7515 §4.1.6.
+ +87 + + + + + + +
   *     "x5c" (X.509 Certificate Chain) Header Parameter</a>
+ +88 + + + + + + +
   */
+ +89 + + + + + + +
  public Optional<List<X509Certificate>> getX5c() {
+ +90 + + +1 + +1. getX5c : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getX5c → KILLED
+ +
+
+
    return Optional.ofNullable(x5c);
+ +91 + + + + + + +
  }
+ +92 + + + + + + +
}

Mutations

58 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
64 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.JsonIoSpec
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
74 + + + +

1.1
Location : getTyp
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getTyp → SURVIVED

+
82 + + + +

1.1
Location : getX5u
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getX5u → KILLED

+
90 + + + +

1.1
Location : getX5c
Killed by : com.yubico.fido.metadata.FidoMetadataDownloaderSpec
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getX5c → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataBLOBPayloadEntry.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataBLOBPayloadEntry.java.html new file mode 100644 index 000000000..0a4a032dd --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataBLOBPayloadEntry.java.html @@ -0,0 +1,2738 @@ + + + + + + + + + +

MetadataBLOBPayloadEntry.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +4 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +5 + + + + + + +
import java.net.URL;
+ +6 + + + + + + +
import java.time.LocalDate;
+ +7 + + + + + + +
import java.util.Collections;
+ +8 + + + + + + +
import java.util.List;
+ +9 + + + + + + +
import java.util.Optional;
+ +10 + + + + + + +
import java.util.Set;
+ +11 + + + + + + +
import java.util.stream.Collectors;
+ +12 + + + + + + +
import lombok.Builder;
+ +13 + + + + + + +
import lombok.NonNull;
+ +14 + + + + + + +
import lombok.Value;
+ +15 + + + + + + +
import lombok.extern.jackson.Jacksonized;
+ +16 + + + + + + +
+ +17 + + + + + + +
/**
+ +18 + + + + + + +
 * An element of {@link MetadataBLOBPayload#getEntries() entries} in a {@link MetadataBLOBPayload}.
+ +19 + + + + + + +
 *
+ +20 + + + + + + +
 * @see <a
+ +21 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +22 + + + + + + +
 *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +23 + + + + + + +
 */
+ +24 + + + + + + +
@Value
+ +25 + + + + + + +
@Builder(toBuilder = true)
+ +26 + + + + + + +
@Jacksonized
+ +27 + + + + + + +
public class MetadataBLOBPayloadEntry {
+ +28 + + + + + + +
+ +29 + + + + + + +
  /**
+ +30 + + + + + + +
   * @see <a
+ +31 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +32 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +33 + + + + + + +
   */
+ +34 + + + + + + +
  AAID aaid;
+ +35 + + + + + + +
+ +36 + + + + + + +
  /**
+ +37 + + + + + + +
   * @see <a
+ +38 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +39 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +40 + + + + + + +
   */
+ +41 + + + + + + +
  AAGUID aaguid;
+ +42 + + + + + + +
+ +43 + + + + + + +
  /**
+ +44 + + + + + + +
   * @see <a
+ +45 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +46 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +47 + + + + + + +
   */
+ +48 + + + + + + +
  Set<String> attestationCertificateKeyIdentifiers;
+ +49 + + + + + + +
+ +50 + + + + + + +
  /**
+ +51 + + + + + + +
   * @see <a
+ +52 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +53 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +54 + + + + + + +
   */
+ +55 + + + + + + +
  MetadataStatement metadataStatement;
+ +56 + + + + + + +
+ +57 + + + + + + +
  /**
+ +58 + + + + + + +
   * @see <a
+ +59 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +60 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +61 + + + + + + +
   */
+ +62 + + + + + + +
  List<BiometricStatusReport> biometricStatusReports;
+ +63 + + + + + + +
+ +64 + + + + + + +
  /**
+ +65 + + + + + + +
   * @see <a
+ +66 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +67 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +68 + + + + + + +
   */
+ +69 + + + + + + +
  @NonNull List<StatusReport> statusReports;
+ +70 + + + + + + +
+ +71 + + + + + + +
  /**
+ +72 + + + + + + +
   * @see <a
+ +73 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +74 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +75 + + + + + + +
   */
+ +76 + + + + + + +
  @NonNull LocalDate timeOfLastStatusChange;
+ +77 + + + + + + +
+ +78 + + + + + + +
  /**
+ +79 + + + + + + +
   * @see <a
+ +80 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +81 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +82 + + + + + + +
   */
+ +83 + + + + + + +
  URL rogueListURL;
+ +84 + + + + + + +
+ +85 + + + + + + +
  /**
+ +86 + + + + + + +
   * @see <a
+ +87 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +88 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +89 + + + + + + +
   */
+ +90 + + + + + + +
  ByteArray rogueListHash;
+ +91 + + + + + + +
+ +92 + + + + + + +
  private MetadataBLOBPayloadEntry(
+ +93 + + + + + + +
      AAID aaid,
+ +94 + + + + + + +
      AAGUID aaguid,
+ +95 + + + + + + +
      Set<String> attestationCertificateKeyIdentifiers,
+ +96 + + + + + + +
      MetadataStatement metadataStatement,
+ +97 + + + + + + +
      List<BiometricStatusReport> biometricStatusReports,
+ +98 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull List<StatusReport> statusReports,
+ +99 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull LocalDate timeOfLastStatusChange,
+ +100 + + + + + + +
      URL rogueListURL,
+ +101 + + + + + + +
      ByteArray rogueListHash) {
+ +102 + + + + + + +
    this.aaid = aaid;
+ +103 + + + + + + +
    this.aaguid = aaguid;
+ +104 + + + + + + +
    this.attestationCertificateKeyIdentifiers =
+ +105 + + + + + + +
        CollectionUtil.immutableSetOrEmpty(attestationCertificateKeyIdentifiers);
+ +106 + + + + + + +
    this.metadataStatement = metadataStatement;
+ +107 + + + + + + +
    this.biometricStatusReports = CollectionUtil.immutableListOrEmpty(biometricStatusReports);
+ +108 + + + + + + +
    this.statusReports =
+ +109 + + + + + + +
        Collections.unmodifiableList(
+ +110 + + + + + + +
            statusReports.stream()
+ +111 + + + + + + +
                .filter(
+ +112 + + +2 + +1. lambda$new$0 : replaced boolean return with true for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::lambda$new$0 → KILLED
+2. lambda$new$0 : negated conditional → KILLED
+ +
+
+
                    statusReport -> !statusReport.getStatus().equals(AuthenticatorStatus.UNKNOWN))
+ +113 + + + + + + +
                .collect(Collectors.toList()));
+ +114 + + + + + + +
    this.timeOfLastStatusChange = timeOfLastStatusChange;
+ +115 + + + + + + +
    this.rogueListURL = rogueListURL;
+ +116 + + + + + + +
    this.rogueListHash = rogueListHash;
+ +117 + + + + + + +
  }
+ +118 + + + + + + +
+ +119 + + + + + + +
  /**
+ +120 + + + + + + +
   * @see <a
+ +121 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +122 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +123 + + + + + + +
   */
+ +124 + + + + + + +
  public Optional<AAID> getAaid() {
+ +125 + + +1 + +1. getAaid : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getAaid → KILLED
+ +
+
+
    return Optional.ofNullable(this.aaid);
+ +126 + + + + + + +
  }
+ +127 + + + + + + +
+ +128 + + + + + + +
  /**
+ +129 + + + + + + +
   * @see <a
+ +130 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +131 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +132 + + + + + + +
   */
+ +133 + + + + + + +
  public Optional<AAGUID> getAaguid() {
+ +134 + + +1 + +1. getAaguid : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getAaguid → KILLED
+ +
+
+
    return Optional.ofNullable(this.aaguid);
+ +135 + + + + + + +
  }
+ +136 + + + + + + +
+ +137 + + + + + + +
  /**
+ +138 + + + + + + +
   * @see <a
+ +139 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +140 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +141 + + + + + + +
   */
+ +142 + + + + + + +
  public Optional<MetadataStatement> getMetadataStatement() {
+ +143 + + +1 + +1. getMetadataStatement : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getMetadataStatement → KILLED
+ +
+
+
    return Optional.ofNullable(this.metadataStatement);
+ +144 + + + + + + +
  }
+ +145 + + + + + + +
+ +146 + + + + + + +
  /**
+ +147 + + + + + + +
   * @see <a
+ +148 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +149 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +150 + + + + + + +
   */
+ +151 + + + + + + +
  public Optional<LocalDate> getTimeOfLastStatusChange() {
+ +152 + + +1 + +1. getTimeOfLastStatusChange : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getTimeOfLastStatusChange → KILLED
+ +
+
+
    return Optional.of(this.timeOfLastStatusChange);
+ +153 + + + + + + +
  }
+ +154 + + + + + + +
+ +155 + + + + + + +
  /**
+ +156 + + + + + + +
   * @see <a
+ +157 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +158 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +159 + + + + + + +
   */
+ +160 + + + + + + +
  public Optional<URL> getRogueListURL() {
+ +161 + + +1 + +1. getRogueListURL : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getRogueListURL → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.rogueListURL);
+ +162 + + + + + + +
  }
+ +163 + + + + + + +
+ +164 + + + + + + +
  /**
+ +165 + + + + + + +
   * @see <a
+ +166 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary">FIDO
+ +167 + + + + + + +
   *     Metadata Service §3.1.1. Metadata BLOB Payload Entry dictionary</a>
+ +168 + + + + + + +
   */
+ +169 + + + + + + +
  public Optional<ByteArray> getRogueListHash() {
+ +170 + + +1 + +1. getRogueListHash : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getRogueListHash → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.rogueListHash);
+ +171 + + + + + + +
  }
+ +172 + + + + + + +
}

Mutations

98 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
99 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
112 + + + +

1.1
Location : lambda$new$0
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced boolean return with true for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::lambda$new$0 → KILLED

2.2
Location : lambda$new$0
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
125 + + + +

1.1
Location : getAaid
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getAaid → KILLED

+
134 + + + +

1.1
Location : getAaguid
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getAaguid → KILLED

+
143 + + + +

1.1
Location : getMetadataStatement
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getMetadataStatement → KILLED

+
152 + + + +

1.1
Location : getTimeOfLastStatusChange
Killed by : com.yubico.fido.metadata.JsonIoSpec
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getTimeOfLastStatusChange → KILLED

+
161 + + + +

1.1
Location : getRogueListURL
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getRogueListURL → SURVIVED

+
170 + + + +

1.1
Location : getRogueListHash
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getRogueListHash → SURVIVED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataStatement.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataStatement.java.html new file mode 100644 index 000000000..2e87b3bfc --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/MetadataStatement.java.html @@ -0,0 +1,6487 @@ + + + + + + + + + +

MetadataStatement.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+ +4 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+ +5 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +6 + + + + + + +
import com.yubico.webauthn.extension.uvm.KeyProtectionType;
+ +7 + + + + + + +
import com.yubico.webauthn.extension.uvm.MatcherProtectionType;
+ +8 + + + + + + +
import java.security.cert.X509Certificate;
+ +9 + + + + + + +
import java.util.List;
+ +10 + + + + + + +
import java.util.Optional;
+ +11 + + + + + + +
import java.util.Set;
+ +12 + + + + + + +
import lombok.Builder;
+ +13 + + + + + + +
import lombok.NonNull;
+ +14 + + + + + + +
import lombok.Value;
+ +15 + + + + + + +
import lombok.extern.jackson.Jacksonized;
+ +16 + + + + + + +
+ +17 + + + + + + +
/**
+ +18 + + + + + + +
 * Relying Parties can learn a subset of verifiable information for authenticators certified by the
+ +19 + + + + + + +
 * FIDO Alliance with an Authenticator Metadata statement. The Metadata statement can be acquired
+ +20 + + + + + + +
 * from the Metadata BLOB that is hosted on the Metadata Service [<a
+ +21 + + + + + + +
 * href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#biblio-fidometadataservice">FIDOMetadataService</a>].
+ +22 + + + + + + +
 *
+ +23 + + + + + + +
 * <p>This class does not include the field <code>ecdaaTrustAnchors</code> since ECDAA is deprecated
+ +24 + + + + + + +
 * in WebAuthn Level 2.
+ +25 + + + + + + +
 *
+ +26 + + + + + + +
 * @see <a
+ +27 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +28 + + + + + + +
 *     Metadata Statement</a>
+ +29 + + + + + + +
 */
+ +30 + + + + + + +
@Value
+ +31 + + + + + + +
@Builder(toBuilder = true)
+ +32 + + + + + + +
@Jacksonized
+ +33 + + + + + + +
public class MetadataStatement {
+ +34 + + + + + + +
+ +35 + + + + + + +
  /**
+ +36 + + + + + + +
   * @see <a
+ +37 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +38 + + + + + + +
   *     Metadata Statement</a>
+ +39 + + + + + + +
   */
+ +40 + + + + + + +
  String legalHeader;
+ +41 + + + + + + +
+ +42 + + + + + + +
  /**
+ +43 + + + + + + +
   * @see <a
+ +44 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +45 + + + + + + +
   *     Metadata Statement</a>
+ +46 + + + + + + +
   */
+ +47 + + + + + + +
  AAID aaid;
+ +48 + + + + + + +
+ +49 + + + + + + +
  /**
+ +50 + + + + + + +
   * @see <a
+ +51 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +52 + + + + + + +
   *     Metadata Statement</a>
+ +53 + + + + + + +
   */
+ +54 + + + + + + +
  AAGUID aaguid;
+ +55 + + + + + + +
+ +56 + + + + + + +
  /**
+ +57 + + + + + + +
   * @see <a
+ +58 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +59 + + + + + + +
   *     Metadata Statement</a>
+ +60 + + + + + + +
   */
+ +61 + + + + + + +
  Set<String> attestationCertificateKeyIdentifiers;
+ +62 + + + + + + +
+ +63 + + + + + + +
  /**
+ +64 + + + + + + +
   * @see <a
+ +65 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +66 + + + + + + +
   *     Metadata Statement</a>
+ +67 + + + + + + +
   */
+ +68 + + + + + + +
  String description;
+ +69 + + + + + + +
+ +70 + + + + + + +
  /**
+ +71 + + + + + + +
   * @see <a
+ +72 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +73 + + + + + + +
   *     Metadata Statement</a>
+ +74 + + + + + + +
   */
+ +75 + + + + + + +
  AlternativeDescriptions alternativeDescriptions;
+ +76 + + + + + + +
+ +77 + + + + + + +
  /**
+ +78 + + + + + + +
   * @see <a
+ +79 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +80 + + + + + + +
   *     Metadata Statement</a>
+ +81 + + + + + + +
   */
+ +82 + + + + + + +
  long authenticatorVersion;
+ +83 + + + + + + +
+ +84 + + + + + + +
  /**
+ +85 + + + + + + +
   * @see <a
+ +86 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +87 + + + + + + +
   *     Metadata Statement</a>
+ +88 + + + + + + +
   */
+ +89 + + + + + + +
  @NonNull ProtocolFamily protocolFamily;
+ +90 + + + + + + +
+ +91 + + + + + + +
  /**
+ +92 + + + + + + +
   * @see <a
+ +93 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +94 + + + + + + +
   *     Metadata Statement</a>
+ +95 + + + + + + +
   */
+ +96 + + + + + + +
  int schema;
+ +97 + + + + + + +
+ +98 + + + + + + +
  /**
+ +99 + + + + + + +
   * @see <a
+ +100 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +101 + + + + + + +
   *     Metadata Statement</a>
+ +102 + + + + + + +
   */
+ +103 + + + + + + +
  @NonNull Set<Version> upv;
+ +104 + + + + + + +
+ +105 + + + + + + +
  /**
+ +106 + + + + + + +
   * @see <a
+ +107 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +108 + + + + + + +
   *     Metadata Statement</a>
+ +109 + + + + + + +
   */
+ +110 + + + + + + +
  @NonNull Set<AuthenticationAlgorithm> authenticationAlgorithms;
+ +111 + + + + + + +
+ +112 + + + + + + +
  /**
+ +113 + + + + + + +
   * @see <a
+ +114 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +115 + + + + + + +
   *     Metadata Statement</a>
+ +116 + + + + + + +
   */
+ +117 + + + + + + +
  @NonNull Set<PublicKeyRepresentationFormat> publicKeyAlgAndEncodings;
+ +118 + + + + + + +
+ +119 + + + + + + +
  /**
+ +120 + + + + + + +
   * @see <a
+ +121 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +122 + + + + + + +
   *     Metadata Statement</a>
+ +123 + + + + + + +
   */
+ +124 + + + + + + +
  @NonNull Set<AuthenticatorAttestationType> attestationTypes;
+ +125 + + + + + + +
+ +126 + + + + + + +
  /**
+ +127 + + + + + + +
   * @see <a
+ +128 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +129 + + + + + + +
   *     Metadata Statement</a>
+ +130 + + + + + + +
   */
+ +131 + + + + + + +
  @NonNull Set<Set<VerificationMethodDescriptor>> userVerificationDetails;
+ +132 + + + + + + +
+ +133 + + + + + + +
  /**
+ +134 + + + + + + +
   * @see <a
+ +135 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +136 + + + + + + +
   *     Metadata Statement</a>
+ +137 + + + + + + +
   */
+ +138 + + + + + + +
  @NonNull Set<KeyProtectionType> keyProtection;
+ +139 + + + + + + +
+ +140 + + + + + + +
  /**
+ +141 + + + + + + +
   * @see <a
+ +142 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +143 + + + + + + +
   *     Metadata Statement</a>
+ +144 + + + + + + +
   */
+ +145 + + + + + + +
  Boolean isKeyRestricted;
+ +146 + + + + + + +
+ +147 + + + + + + +
  /**
+ +148 + + + + + + +
   * @see <a
+ +149 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +150 + + + + + + +
   *     Metadata Statement</a>
+ +151 + + + + + + +
   */
+ +152 + + + + + + +
  Boolean isFreshUserVerificationRequired;
+ +153 + + + + + + +
+ +154 + + + + + + +
  /**
+ +155 + + + + + + +
   * @see <a
+ +156 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +157 + + + + + + +
   *     Metadata Statement</a>
+ +158 + + + + + + +
   */
+ +159 + + + + + + +
  @NonNull Set<MatcherProtectionType> matcherProtection;
+ +160 + + + + + + +
+ +161 + + + + + + +
  /**
+ +162 + + + + + + +
   * @see <a
+ +163 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +164 + + + + + + +
   *     Metadata Statement</a>
+ +165 + + + + + + +
   */
+ +166 + + + + + + +
  Integer cryptoStrength;
+ +167 + + + + + + +
+ +168 + + + + + + +
  /**
+ +169 + + + + + + +
   * @see <a
+ +170 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +171 + + + + + + +
   *     Metadata Statement</a>
+ +172 + + + + + + +
   */
+ +173 + + + + + + +
  Set<AttachmentHint> attachmentHint;
+ +174 + + + + + + +
+ +175 + + + + + + +
  /**
+ +176 + + + + + + +
   * @see <a
+ +177 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +178 + + + + + + +
   *     Metadata Statement</a>
+ +179 + + + + + + +
   */
+ +180 + + + + + + +
  @NonNull Set<TransactionConfirmationDisplayType> tcDisplay;
+ +181 + + + + + + +
+ +182 + + + + + + +
  /**
+ +183 + + + + + + +
   * @see <a
+ +184 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +185 + + + + + + +
   *     Metadata Statement</a>
+ +186 + + + + + + +
   */
+ +187 + + + + + + +
  String tcDisplayContentType;
+ +188 + + + + + + +
+ +189 + + + + + + +
  /**
+ +190 + + + + + + +
   * @see <a
+ +191 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +192 + + + + + + +
   *     Metadata Statement</a>
+ +193 + + + + + + +
   */
+ +194 + + + + + + +
  List<DisplayPNGCharacteristicsDescriptor> tcDisplayPNGCharacteristics;
+ +195 + + + + + + +
+ +196 + + + + + + +
  /**
+ +197 + + + + + + +
   * @see <a
+ +198 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +199 + + + + + + +
   *     Metadata Statement</a>
+ +200 + + + + + + +
   */
+ +201 + + + + + + +
  @NonNull
+ +202 + + + + + + +
  @JsonDeserialize(contentConverter = CertFromBase64Converter.class)
+ +203 + + + + + + +
  @JsonSerialize(contentConverter = CertToBase64Converter.class)
+ +204 + + + + + + +
  Set<X509Certificate> attestationRootCertificates;
+ +205 + + + + + + +
+ +206 + + + + + + +
  /**
+ +207 + + + + + + +
   * @see <a
+ +208 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +209 + + + + + + +
   *     Metadata Statement</a>
+ +210 + + + + + + +
   */
+ +211 + + + + + + +
  String icon;
+ +212 + + + + + + +
+ +213 + + + + + + +
  /**
+ +214 + + + + + + +
   * @see <a
+ +215 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +216 + + + + + + +
   *     Metadata Statement</a>
+ +217 + + + + + + +
   */
+ +218 + + + + + + +
  Set<ExtensionDescriptor> supportedExtensions;
+ +219 + + + + + + +
+ +220 + + + + + + +
  /**
+ +221 + + + + + + +
   * @see <a
+ +222 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +223 + + + + + + +
   *     Metadata Statement</a>
+ +224 + + + + + + +
   */
+ +225 + + + + + + +
  AuthenticatorGetInfo authenticatorGetInfo;
+ +226 + + + + + + +
+ +227 + + + + + + +
  public MetadataStatement(
+ +228 + + + + + + +
      String legalHeader,
+ +229 + + + + + + +
      AAID aaid,
+ +230 + + + + + + +
      AAGUID aaguid,
+ +231 + + + + + + +
      Set<String> attestationCertificateKeyIdentifiers,
+ +232 + + + + + + +
      String description,
+ +233 + + + + + + +
      AlternativeDescriptions alternativeDescriptions,
+ +234 + + + + + + +
      long authenticatorVersion,
+ +235 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull ProtocolFamily protocolFamily,
+ +236 + + + + + + +
      int schema,
+ +237 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Set<Version> upv,
+ +238 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Set<AuthenticationAlgorithm> authenticationAlgorithms,
+ +239 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Set<PublicKeyRepresentationFormat> publicKeyAlgAndEncodings,
+ +240 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Set<AuthenticatorAttestationType> attestationTypes,
+ +241 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Set<Set<VerificationMethodDescriptor>> userVerificationDetails,
+ +242 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Set<KeyProtectionType> keyProtection,
+ +243 + + + + + + +
      Boolean isKeyRestricted,
+ +244 + + + + + + +
      Boolean isFreshUserVerificationRequired,
+ +245 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Set<MatcherProtectionType> matcherProtection,
+ +246 + + + + + + +
      Integer cryptoStrength,
+ +247 + + + + + + +
      Set<AttachmentHint> attachmentHint,
+ +248 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Set<TransactionConfirmationDisplayType> tcDisplay,
+ +249 + + + + + + +
      String tcDisplayContentType,
+ +250 + + + + + + +
      List<DisplayPNGCharacteristicsDescriptor> tcDisplayPNGCharacteristics,
+ +251 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Set<X509Certificate> attestationRootCertificates,
+ +252 + + + + + + +
      String icon,
+ +253 + + + + + + +
      Set<ExtensionDescriptor> supportedExtensions,
+ +254 + + + + + + +
      AuthenticatorGetInfo authenticatorGetInfo) {
+ +255 + + + + + + +
    this.legalHeader = legalHeader;
+ +256 + + + + + + +
    this.aaid = aaid;
+ +257 + + + + + + +
    this.aaguid = aaguid;
+ +258 + + + + + + +
    this.attestationCertificateKeyIdentifiers =
+ +259 + + + + + + +
        CollectionUtil.immutableSetOrEmpty(attestationCertificateKeyIdentifiers);
+ +260 + + + + + + +
    this.description = description;
+ +261 + + + + + + +
    this.alternativeDescriptions = alternativeDescriptions;
+ +262 + + + + + + +
    this.authenticatorVersion = authenticatorVersion;
+ +263 + + + + + + +
    this.protocolFamily = protocolFamily;
+ +264 + + + + + + +
    this.schema = schema;
+ +265 + + + + + + +
    this.upv = upv;
+ +266 + + + + + + +
    this.authenticationAlgorithms = authenticationAlgorithms;
+ +267 + + + + + + +
    this.publicKeyAlgAndEncodings = publicKeyAlgAndEncodings;
+ +268 + + + + + + +
    this.attestationTypes = attestationTypes;
+ +269 + + + + + + +
    this.userVerificationDetails = userVerificationDetails;
+ +270 + + + + + + +
    this.keyProtection = keyProtection;
+ +271 + + + + + + +
    this.isKeyRestricted = isKeyRestricted;
+ +272 + + + + + + +
    this.isFreshUserVerificationRequired = isFreshUserVerificationRequired;
+ +273 + + + + + + +
    this.matcherProtection = matcherProtection;
+ +274 + + + + + + +
    this.cryptoStrength = cryptoStrength;
+ +275 + + + + + + +
    this.attachmentHint = attachmentHint;
+ +276 + + + + + + +
    this.tcDisplay = tcDisplay;
+ +277 + + + + + + +
    this.tcDisplayContentType = tcDisplayContentType;
+ +278 + + + + + + +
    this.tcDisplayPNGCharacteristics = tcDisplayPNGCharacteristics;
+ +279 + + + + + + +
    this.attestationRootCertificates = attestationRootCertificates;
+ +280 + + + + + + +
    this.icon = icon;
+ +281 + + + + + + +
    this.supportedExtensions = supportedExtensions;
+ +282 + + + + + + +
    this.authenticatorGetInfo = authenticatorGetInfo;
+ +283 + + + + + + +
  }
+ +284 + + + + + + +
+ +285 + + + + + + +
  /**
+ +286 + + + + + + +
   * @see <a
+ +287 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +288 + + + + + + +
   *     Metadata Statement</a>
+ +289 + + + + + + +
   */
+ +290 + + + + + + +
  public Optional<String> getLegalHeader() {
+ +291 + + +1 + +1. getLegalHeader : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getLegalHeader → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.legalHeader);
+ +292 + + + + + + +
  }
+ +293 + + + + + + +
+ +294 + + + + + + +
  /**
+ +295 + + + + + + +
   * @see <a
+ +296 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +297 + + + + + + +
   *     Metadata Statement</a>
+ +298 + + + + + + +
   */
+ +299 + + + + + + +
  public Optional<AAID> getAaid() {
+ +300 + + +1 + +1. getAaid : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAaid → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.aaid);
+ +301 + + + + + + +
  }
+ +302 + + + + + + +
+ +303 + + + + + + +
  /**
+ +304 + + + + + + +
   * @see <a
+ +305 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +306 + + + + + + +
   *     Metadata Statement</a>
+ +307 + + + + + + +
   */
+ +308 + + + + + + +
  public Optional<AAGUID> getAaguid() {
+ +309 + + +1 + +1. getAaguid : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAaguid → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.aaguid);
+ +310 + + + + + + +
  }
+ +311 + + + + + + +
+ +312 + + + + + + +
  /**
+ +313 + + + + + + +
   * @see <a
+ +314 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +315 + + + + + + +
   *     Metadata Statement</a>
+ +316 + + + + + + +
   */
+ +317 + + + + + + +
  public Optional<String> getDescription() {
+ +318 + + +1 + +1. getDescription : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getDescription → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.description);
+ +319 + + + + + + +
  }
+ +320 + + + + + + +
+ +321 + + + + + + +
  /**
+ +322 + + + + + + +
   * @see <a
+ +323 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +324 + + + + + + +
   *     Metadata Statement</a>
+ +325 + + + + + + +
   */
+ +326 + + + + + + +
  public Optional<AlternativeDescriptions> getAlternativeDescriptions() {
+ +327 + + +1 + +1. getAlternativeDescriptions : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAlternativeDescriptions → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.alternativeDescriptions);
+ +328 + + + + + + +
  }
+ +329 + + + + + + +
+ +330 + + + + + + +
  /**
+ +331 + + + + + + +
   * @see <a
+ +332 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +333 + + + + + + +
   *     Metadata Statement</a>
+ +334 + + + + + + +
   */
+ +335 + + + + + + +
  public Optional<Boolean> getIsKeyRestricted() {
+ +336 + + +1 + +1. getIsKeyRestricted : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIsKeyRestricted → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.isKeyRestricted);
+ +337 + + + + + + +
  }
+ +338 + + + + + + +
+ +339 + + + + + + +
  /**
+ +340 + + + + + + +
   * @see <a
+ +341 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +342 + + + + + + +
   *     Metadata Statement</a>
+ +343 + + + + + + +
   */
+ +344 + + + + + + +
  public Optional<Boolean> getIsFreshUserVerificationRequired() {
+ +345 + + +1 + +1. getIsFreshUserVerificationRequired : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIsFreshUserVerificationRequired → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.isFreshUserVerificationRequired);
+ +346 + + + + + + +
  }
+ +347 + + + + + + +
+ +348 + + + + + + +
  /**
+ +349 + + + + + + +
   * @see <a
+ +350 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +351 + + + + + + +
   *     Metadata Statement</a>
+ +352 + + + + + + +
   */
+ +353 + + + + + + +
  public Optional<Integer> getCryptoStrength() {
+ +354 + + +1 + +1. getCryptoStrength : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getCryptoStrength → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.cryptoStrength);
+ +355 + + + + + + +
  }
+ +356 + + + + + + +
+ +357 + + + + + + +
  /**
+ +358 + + + + + + +
   * @see <a
+ +359 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +360 + + + + + + +
   *     Metadata Statement</a>
+ +361 + + + + + + +
   */
+ +362 + + + + + + +
  public Optional<Set<AttachmentHint>> getAttachmentHint() {
+ +363 + + +1 + +1. getAttachmentHint : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAttachmentHint → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.attachmentHint);
+ +364 + + + + + + +
  }
+ +365 + + + + + + +
+ +366 + + + + + + +
  /**
+ +367 + + + + + + +
   * @see <a
+ +368 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +369 + + + + + + +
   *     Metadata Statement</a>
+ +370 + + + + + + +
   */
+ +371 + + + + + + +
  public Optional<String> getTcDisplayContentType() {
+ +372 + + +1 + +1. getTcDisplayContentType : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getTcDisplayContentType → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.tcDisplayContentType);
+ +373 + + + + + + +
  }
+ +374 + + + + + + +
+ +375 + + + + + + +
  /**
+ +376 + + + + + + +
   * @see <a
+ +377 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +378 + + + + + + +
   *     Metadata Statement</a>
+ +379 + + + + + + +
   */
+ +380 + + + + + + +
  public Optional<List<DisplayPNGCharacteristicsDescriptor>> getTcDisplayPNGCharacteristics() {
+ +381 + + +1 + +1. getTcDisplayPNGCharacteristics : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getTcDisplayPNGCharacteristics → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.tcDisplayPNGCharacteristics);
+ +382 + + + + + + +
  }
+ +383 + + + + + + +
+ +384 + + + + + + +
  /**
+ +385 + + + + + + +
   * @see <a
+ +386 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +387 + + + + + + +
   *     Metadata Statement</a>
+ +388 + + + + + + +
   */
+ +389 + + + + + + +
  public Optional<String> getIcon() {
+ +390 + + +1 + +1. getIcon : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIcon → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.icon);
+ +391 + + + + + + +
  }
+ +392 + + + + + + +
+ +393 + + + + + + +
  /**
+ +394 + + + + + + +
   * @see <a
+ +395 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +396 + + + + + + +
   *     Metadata Statement</a>
+ +397 + + + + + + +
   */
+ +398 + + + + + + +
  public Optional<Set<ExtensionDescriptor>> getSupportedExtensions() {
+ +399 + + +1 + +1. getSupportedExtensions : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getSupportedExtensions → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.supportedExtensions);
+ +400 + + + + + + +
  }
+ +401 + + + + + + +
+ +402 + + + + + + +
  /**
+ +403 + + + + + + +
   * @see <a
+ +404 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#metadata-statement-format">FIDO
+ +405 + + + + + + +
   *     Metadata Statement</a>
+ +406 + + + + + + +
   */
+ +407 + + + + + + +
  public Optional<AuthenticatorGetInfo> getAuthenticatorGetInfo() {
+ +408 + + +1 + +1. getAuthenticatorGetInfo : replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAuthenticatorGetInfo → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.authenticatorGetInfo);
+ +409 + + + + + + +
  }
+ +410 + + + + + + +
}

Mutations

235 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
237 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
238 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
239 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
240 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
241 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
242 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
245 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
248 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
251 + + + +

1.1
Location : <init>
Killed by : com.yubico.fido.metadata.FidoMds3Spec
negated conditional → KILLED

+
291 + + + +

1.1
Location : getLegalHeader
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getLegalHeader → SURVIVED

+
300 + + + +

1.1
Location : getAaid
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAaid → SURVIVED

+
309 + + + +

1.1
Location : getAaguid
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAaguid → SURVIVED

+
318 + + + +

1.1
Location : getDescription
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getDescription → SURVIVED

+
327 + + + +

1.1
Location : getAlternativeDescriptions
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAlternativeDescriptions → SURVIVED

+
336 + + + +

1.1
Location : getIsKeyRestricted
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIsKeyRestricted → SURVIVED

+
345 + + + +

1.1
Location : getIsFreshUserVerificationRequired
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIsFreshUserVerificationRequired → SURVIVED

+
354 + + + +

1.1
Location : getCryptoStrength
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getCryptoStrength → SURVIVED

+
363 + + + +

1.1
Location : getAttachmentHint
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAttachmentHint → SURVIVED

+
372 + + + +

1.1
Location : getTcDisplayContentType
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getTcDisplayContentType → SURVIVED

+
381 + + + +

1.1
Location : getTcDisplayPNGCharacteristics
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getTcDisplayPNGCharacteristics → SURVIVED

+
390 + + + +

1.1
Location : getIcon
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIcon → SURVIVED

+
399 + + + +

1.1
Location : getSupportedExtensions
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getSupportedExtensions → SURVIVED

+
408 + + + +

1.1
Location : getAuthenticatorGetInfo
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAuthenticatorGetInfo → SURVIVED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/PatternAccuracyDescriptor.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/PatternAccuracyDescriptor.java.html new file mode 100644 index 000000000..74957ea14 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/PatternAccuracyDescriptor.java.html @@ -0,0 +1,958 @@ + + + + + + + + + +

PatternAccuracyDescriptor.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import java.util.Optional;
+ +4 + + + + + + +
import lombok.Builder;
+ +5 + + + + + + +
import lombok.Value;
+ +6 + + + + + + +
import lombok.extern.jackson.Jacksonized;
+ +7 + + + + + + +
+ +8 + + + + + + +
/**
+ +9 + + + + + + +
 * The {@link PatternAccuracyDescriptor} describes relevant accuracy/complexity aspects in the case
+ +10 + + + + + + +
 * that a pattern is used as the user verification method.
+ +11 + + + + + + +
 *
+ +12 + + + + + + +
 * @see <a
+ +13 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#patternaccuracydescriptor-dictionary">FIDO
+ +14 + + + + + + +
 *     Metadata Statement §3.4. PatternAccuracyDescriptor dictionary</a>
+ +15 + + + + + + +
 */
+ +16 + + + + + + +
@Value
+ +17 + + + + + + +
@Builder(toBuilder = true)
+ +18 + + + + + + +
@Jacksonized
+ +19 + + + + + + +
public class PatternAccuracyDescriptor {
+ +20 + + + + + + +
+ +21 + + + + + + +
  /**
+ +22 + + + + + + +
   * @see <a
+ +23 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#patternaccuracydescriptor-dictionary">FIDO
+ +24 + + + + + + +
   *     Metadata Statement §3.4. PatternAccuracyDescriptor dictionary</a>
+ +25 + + + + + + +
   */
+ +26 + + + + + + +
  long minComplexity;
+ +27 + + + + + + +
+ +28 + + + + + + +
  /**
+ +29 + + + + + + +
   * @see <a
+ +30 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#patternaccuracydescriptor-dictionary">FIDO
+ +31 + + + + + + +
   *     Metadata Statement §3.4. PatternAccuracyDescriptor dictionary</a>
+ +32 + + + + + + +
   */
+ +33 + + + + + + +
  Integer maxRetries;
+ +34 + + + + + + +
+ +35 + + + + + + +
  /**
+ +36 + + + + + + +
   * @see <a
+ +37 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#patternaccuracydescriptor-dictionary">FIDO
+ +38 + + + + + + +
   *     Metadata Statement §3.4. PatternAccuracyDescriptor dictionary</a>
+ +39 + + + + + + +
   */
+ +40 + + + + + + +
  Integer blockSlowdown;
+ +41 + + + + + + +
+ +42 + + + + + + +
  /**
+ +43 + + + + + + +
   * @see <a
+ +44 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#patternaccuracydescriptor-dictionary">FIDO
+ +45 + + + + + + +
   *     Metadata Statement §3.4. PatternAccuracyDescriptor dictionary</a>
+ +46 + + + + + + +
   */
+ +47 + + + + + + +
  public Optional<Integer> getMaxRetries() {
+ +48 + + +1 + +1. getMaxRetries : replaced return value with Optional.empty for com/yubico/fido/metadata/PatternAccuracyDescriptor::getMaxRetries → SURVIVED
+ +
+
+
    return Optional.ofNullable(maxRetries);
+ +49 + + + + + + +
  }
+ +50 + + + + + + +
+ +51 + + + + + + +
  /**
+ +52 + + + + + + +
   * @see <a
+ +53 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html#patternaccuracydescriptor-dictionary">FIDO
+ +54 + + + + + + +
   *     Metadata Statement §3.4. PatternAccuracyDescriptor dictionary</a>
+ +55 + + + + + + +
   */
+ +56 + + + + + + +
  public Optional<Integer> getBlockSlowdown() {
+ +57 + + +1 + +1. getBlockSlowdown : replaced return value with Optional.empty for com/yubico/fido/metadata/PatternAccuracyDescriptor::getBlockSlowdown → SURVIVED
+ +
+
+
    return Optional.ofNullable(blockSlowdown);
+ +58 + + + + + + +
  }
+ +59 + + + + + + +
}

Mutations

48 + + + +

1.1
Location : getMaxRetries
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/PatternAccuracyDescriptor::getMaxRetries → SURVIVED

+
57 + + + +

1.1
Location : getBlockSlowdown
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/PatternAccuracyDescriptor::getBlockSlowdown → SURVIVED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/StatusReport.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/StatusReport.java.html new file mode 100644 index 000000000..4a688a4ef --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/StatusReport.java.html @@ -0,0 +1,2992 @@ + + + + + + + + + +

StatusReport.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnore;
+ +4 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +5 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+ +6 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+ +7 + + + + + + +
import java.net.MalformedURLException;
+ +8 + + + + + + +
import java.net.URL;
+ +9 + + + + + + +
import java.security.cert.X509Certificate;
+ +10 + + + + + + +
import java.time.LocalDate;
+ +11 + + + + + + +
import java.util.Optional;
+ +12 + + + + + + +
import lombok.AccessLevel;
+ +13 + + + + + + +
import lombok.AllArgsConstructor;
+ +14 + + + + + + +
import lombok.Builder;
+ +15 + + + + + + +
import lombok.Getter;
+ +16 + + + + + + +
import lombok.NonNull;
+ +17 + + + + + + +
import lombok.Value;
+ +18 + + + + + + +
import lombok.extern.jackson.Jacksonized;
+ +19 + + + + + + +
+ +20 + + + + + + +
/**
+ +21 + + + + + + +
 * Contains an {@link AuthenticatorStatus} and additional data associated with it, if any.
+ +22 + + + + + + +
 *
+ +23 + + + + + + +
 * @see <a
+ +24 + + + + + + +
 *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +25 + + + + + + +
 *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +26 + + + + + + +
 */
+ +27 + + + + + + +
@Value
+ +28 + + + + + + +
@Builder
+ +29 + + + + + + +
@Jacksonized
+ +30 + + + + + + +
@AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +31 + + + + + + +
public class StatusReport {
+ +32 + + + + + + +
+ +33 + + + + + + +
  /**
+ +34 + + + + + + +
   * @see <a
+ +35 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +36 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +37 + + + + + + +
   */
+ +38 + + + + + + +
  @NonNull AuthenticatorStatus status;
+ +39 + + + + + + +
+ +40 + + + + + + +
  /**
+ +41 + + + + + + +
   * @see <a
+ +42 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +43 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +44 + + + + + + +
   */
+ +45 + + + + + + +
  LocalDate effectiveDate;
+ +46 + + + + + + +
+ +47 + + + + + + +
  /**
+ +48 + + + + + + +
   * @see <a
+ +49 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +50 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +51 + + + + + + +
   */
+ +52 + + + + + + +
  Long authenticatorVersion;
+ +53 + + + + + + +
+ +54 + + + + + + +
  /**
+ +55 + + + + + + +
   * @see <a
+ +56 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +57 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +58 + + + + + + +
   */
+ +59 + + + + + + +
  @JsonDeserialize(converter = CertFromBase64Converter.class)
+ +60 + + + + + + +
  @JsonSerialize(converter = CertToBase64Converter.class)
+ +61 + + + + + + +
  X509Certificate certificate;
+ +62 + + + + + + +
+ +63 + + + + + + +
  /**
+ +64 + + + + + + +
   * @see <a
+ +65 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +66 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +67 + + + + + + +
   */
+ +68 + + + + + + +
  @JsonProperty("url")
+ +69 + + + + + + +
  @Getter(AccessLevel.NONE)
+ +70 + + + + + + +
  String url;
+ +71 + + + + + + +
+ +72 + + + + + + +
  /**
+ +73 + + + + + + +
   * @see <a
+ +74 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +75 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +76 + + + + + + +
   */
+ +77 + + + + + + +
  String certificationDescriptor;
+ +78 + + + + + + +
+ +79 + + + + + + +
  /**
+ +80 + + + + + + +
   * @see <a
+ +81 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +82 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +83 + + + + + + +
   */
+ +84 + + + + + + +
  String certificateNumber;
+ +85 + + + + + + +
+ +86 + + + + + + +
  /**
+ +87 + + + + + + +
   * @see <a
+ +88 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +89 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +90 + + + + + + +
   */
+ +91 + + + + + + +
  String certificationPolicyVersion;
+ +92 + + + + + + +
+ +93 + + + + + + +
  /**
+ +94 + + + + + + +
   * @see <a
+ +95 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +96 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +97 + + + + + + +
   */
+ +98 + + + + + + +
  String certificationRequirementsVersion;
+ +99 + + + + + + +
+ +100 + + + + + + +
  /**
+ +101 + + + + + + +
   * @see <a
+ +102 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +103 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +104 + + + + + + +
   */
+ +105 + + + + + + +
  public Optional<LocalDate> getEffectiveDate() {
+ +106 + + +1 + +1. getEffectiveDate : replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getEffectiveDate → SURVIVED
+ +
+
+
    return Optional.ofNullable(effectiveDate);
+ +107 + + + + + + +
  }
+ +108 + + + + + + +
+ +109 + + + + + + +
  /**
+ +110 + + + + + + +
   * @see <a
+ +111 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +112 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +113 + + + + + + +
   */
+ +114 + + + + + + +
  public Optional<Long> getAuthenticatorVersion() {
+ +115 + + +1 + +1. getAuthenticatorVersion : replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getAuthenticatorVersion → KILLED
+ +
+
+
    return Optional.ofNullable(authenticatorVersion);
+ +116 + + + + + + +
  }
+ +117 + + + + + + +
+ +118 + + + + + + +
  /**
+ +119 + + + + + + +
   * @see <a
+ +120 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +121 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +122 + + + + + + +
   */
+ +123 + + + + + + +
  @JsonIgnore
+ +124 + + + + + + +
  public Optional<X509Certificate> getCertificate() {
+ +125 + + +1 + +1. getCertificate : replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificate → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.certificate);
+ +126 + + + + + + +
  }
+ +127 + + + + + + +
+ +128 + + + + + + +
  /**
+ +129 + + + + + + +
   * Attempt to parse the {@link #getUrlAsString() url} property, if any, as a {@link URL}.
+ +130 + + + + + + +
   *
+ +131 + + + + + + +
   * @return A present value if and only if {@link #getUrlAsString()} is present and a valid URL.
+ +132 + + + + + + +
   */
+ +133 + + + + + + +
  public Optional<URL> getUrl() {
+ +134 + + + + + + +
    try {
+ +135 + + +1 + +1. getUrl : replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getUrl → NO_COVERAGE
+ +
+
+
      return Optional.of(new URL(url));
+ +136 + + + + + + +
    } catch (MalformedURLException e) {
+ +137 + + + + + + +
      return Optional.empty();
+ +138 + + + + + + +
    }
+ +139 + + + + + + +
  }
+ +140 + + + + + + +
+ +141 + + + + + + +
  /**
+ +142 + + + + + + +
   * Get the raw <code>url</code> property of this {@link StatusReport} object. This may or may not
+ +143 + + + + + + +
   * be a valid URL.
+ +144 + + + + + + +
   *
+ +145 + + + + + + +
   * @see <a
+ +146 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +147 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +148 + + + + + + +
   */
+ +149 + + + + + + +
  @JsonIgnore
+ +150 + + + + + + +
  public Optional<String> getUrlAsString() {
+ +151 + + +1 + +1. getUrlAsString : replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getUrlAsString → NO_COVERAGE
+ +
+
+
    return Optional.ofNullable(this.url);
+ +152 + + + + + + +
  }
+ +153 + + + + + + +
+ +154 + + + + + + +
  /**
+ +155 + + + + + + +
   * @see <a
+ +156 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +157 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +158 + + + + + + +
   */
+ +159 + + + + + + +
  public Optional<String> getCertificationDescriptor() {
+ +160 + + +1 + +1. getCertificationDescriptor : replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationDescriptor → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.certificationDescriptor);
+ +161 + + + + + + +
  }
+ +162 + + + + + + +
+ +163 + + + + + + +
  /**
+ +164 + + + + + + +
   * @see <a
+ +165 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +166 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +167 + + + + + + +
   */
+ +168 + + + + + + +
  public Optional<String> getCertificateNumber() {
+ +169 + + +1 + +1. getCertificateNumber : replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificateNumber → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.certificateNumber);
+ +170 + + + + + + +
  }
+ +171 + + + + + + +
+ +172 + + + + + + +
  /**
+ +173 + + + + + + +
   * @see <a
+ +174 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +175 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +176 + + + + + + +
   */
+ +177 + + + + + + +
  public Optional<String> getCertificationPolicyVersion() {
+ +178 + + +1 + +1. getCertificationPolicyVersion : replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationPolicyVersion → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.certificationPolicyVersion);
+ +179 + + + + + + +
  }
+ +180 + + + + + + +
+ +181 + + + + + + +
  /**
+ +182 + + + + + + +
   * @see <a
+ +183 + + + + + + +
   *     href="https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary">FIDO
+ +184 + + + + + + +
   *     Metadata Service §3.1.3. StatusReport dictionary</a>
+ +185 + + + + + + +
   */
+ +186 + + + + + + +
  public Optional<String> getCertificationRequirementsVersion() {
+ +187 + + +1 + +1. getCertificationRequirementsVersion : replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationRequirementsVersion → SURVIVED
+ +
+
+
    return Optional.ofNullable(this.certificationRequirementsVersion);
+ +188 + + + + + + +
  }
+ +189 + + + + + + +
}

Mutations

106 + + + +

1.1
Location : getEffectiveDate
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getEffectiveDate → SURVIVED

+
115 + + + +

1.1
Location : getAuthenticatorVersion
Killed by : com.yubico.fido.metadata.FidoMds3Spec
replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getAuthenticatorVersion → KILLED

+
125 + + + +

1.1
Location : getCertificate
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificate → SURVIVED

+
135 + + + +

1.1
Location : getUrl
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getUrl → NO_COVERAGE

+
151 + + + +

1.1
Location : getUrlAsString
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getUrlAsString → NO_COVERAGE

+
160 + + + +

1.1
Location : getCertificationDescriptor
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationDescriptor → SURVIVED

+
169 + + + +

1.1
Location : getCertificateNumber
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificateNumber → SURVIVED

+
178 + + + +

1.1
Location : getCertificationPolicyVersion
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationPolicyVersion → SURVIVED

+
187 + + + +

1.1
Location : getCertificationRequirementsVersion
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationRequirementsVersion → SURVIVED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/UnexpectedLegalHeader.java.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/UnexpectedLegalHeader.java.html new file mode 100644 index 000000000..24ea86a5c --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/UnexpectedLegalHeader.java.html @@ -0,0 +1,645 @@ + + + + + + + + + +

UnexpectedLegalHeader.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.fido.metadata;
+ +2 + + + + + + +
+ +3 + + + + + + +
import java.util.Optional;
+ +4 + + + + + + +
import lombok.AccessLevel;
+ +5 + + + + + + +
import lombok.AllArgsConstructor;
+ +6 + + + + + + +
import lombok.Getter;
+ +7 + + + + + + +
import lombok.NonNull;
+ +8 + + + + + + +
+ +9 + + + + + + +
/**
+ +10 + + + + + + +
 * A FIDO Metadata Service metadata BLOB was successfully downloaded and validated, but contained an
+ +11 + + + + + + +
 * unexpected legal header.
+ +12 + + + + + + +
 *
+ +13 + + + + + + +
 * <p>This exception contains the offending downloaded metadata BLOB as well as the cached metadata
+ +14 + + + + + + +
 * BLOB, if any (see {@link #getCachedBlob()}). This enables applications to gracefully fall back to
+ +15 + + + + + + +
 * the cached blob when possible, while notifying maintainers that action is required for the new
+ +16 + + + + + + +
 * legal header.
+ +17 + + + + + + +
 */
+ +18 + + + + + + +
@AllArgsConstructor(access = AccessLevel.PACKAGE)
+ +19 + + + + + + +
public class UnexpectedLegalHeader extends Exception {
+ +20 + + + + + + +
+ +21 + + + + + + +
  /** The cached metadata BLOB, if any, which is assumed to have an expected legal header. */
+ +22 + + + + + + +
  private final MetadataBLOB cachedBlob;
+ +23 + + + + + + +
+ +24 + + + + + + +
  /**
+ +25 + + + + + + +
   * The newly downloaded metadata BLOB, which has an unexpected legal header.
+ +26 + + + + + + +
   *
+ +27 + + + + + + +
   * <p>The unexpected legal header can be retrieved via the {@link MetadataBLOB#getPayload()
+ +28 + + + + + + +
   * getPayload()}.{@link MetadataBLOBPayload#getLegalHeader() getLegalHeader()} methods.
+ +29 + + + + + + +
   *
+ +30 + + + + + + +
   * @see MetadataBLOB#getPayload()
+ +31 + + + + + + +
   * @see MetadataBLOBPayload#getLegalHeader()
+ +32 + + + + + + +
   */
+ +33 + + + + + + +
  @Getter @NonNull private final MetadataBLOB downloadedBlob;
+ +34 + + + + + + +
+ +35 + + + + + + +
  /** The cached metadata BLOB, if any. */
+ +36 + + + + + + +
  public Optional<MetadataBLOB> getCachedBlob() {
+ +37 + + +1 + +1. getCachedBlob : replaced return value with Optional.empty for com/yubico/fido/metadata/UnexpectedLegalHeader::getCachedBlob → NO_COVERAGE
+ +
+
+
    return Optional.ofNullable(cachedBlob);
+ +38 + + + + + + +
  }
+ +39 + + + + + + +
}

Mutations

37 + + + +

1.1
Location : getCachedBlob
Killed by : none
replaced return value with Optional.empty for com/yubico/fido/metadata/UnexpectedLegalHeader::getCachedBlob → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/index.html b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/index.html new file mode 100644 index 000000000..8d2b696dc --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/com.yubico.fido.metadata/index.html @@ -0,0 +1,188 @@ + + + + + + + + +

Pit Test Coverage Report

+

Package Summary

+

com.yubico.fido.metadata

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
1989%
652/732
69%
222/323
75%
222/295
+ + +

Breakdown by Class

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLine CoverageMutation CoverageTest Strength
AAGUID.java
91%
29/32
90%
9/10
90%
9/10
AAID.java
80%
8/10
100%
2/2
100%
2/2
AlternativeDescriptions.java
25%
2/8
0%
0/6
100%
0/0
AuthenticatorGetInfo.java
100%
32/32
24%
7/29
26%
7/27
BiometricAccuracyDescriptor.java
100%
7/7
0%
0/5
0%
0/5
BiometricStatusReport.java
100%
9/9
0%
0/5
0%
0/5
CertFromBase64Converter.java
57%
4/7
67%
2/3
100%
2/2
CertToBase64Converter.java
50%
3/6
67%
2/3
100%
2/2
CodeAccuracyDescriptor.java
100%
6/6
0%
0/2
0%
0/2
FidoMetadataDownloader.java
90%
243/270
94%
107/114
96%
107/112
FidoMetadataDownloaderException.java
82%
9/11
67%
2/3
100%
2/2
FidoMetadataService.java
86%
167/195
75%
66/88
87%
66/76
JacksonCodecs.java
67%
2/3
100%
1/1
100%
1/1
MetadataBLOBHeader.java
93%
13/14
83%
5/6
83%
5/6
MetadataBLOBPayloadEntry.java
100%
30/30
80%
8/10
80%
8/10
MetadataStatement.java
100%
69/69
42%
10/24
42%
10/24
PatternAccuracyDescriptor.java
100%
5/5
0%
0/2
0%
0/2
StatusReport.java
93%
14/15
11%
1/9
14%
1/7
UnexpectedLegalHeader.java
0%
0/3
0%
0/1
100%
0/0
+
+ + + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/index.html b/mutation-coverage-reports/webauthn-server-attestation/index.html new file mode 100644 index 000000000..9483b801f --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/index.html @@ -0,0 +1,69 @@ + + + + + + + + +

Pit Test Coverage Report

+ +

Project Summary

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
1989%
652/732
69%
222/323
75%
222/295
+ + +

Breakdown by Package

+ + + + + + + + + + + + + + + + + + + + + +
NameNumber of ClassesLine CoverageMutation CoverageTest Strength
com.yubico.fido.metadata19
89%
652/732
69%
222/323
75%
222/295
+
+ + + +
+ +Report generated by PIT 1.15.0 + +
+
+ +Enhanced functionality available at arcmutate.com + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-attestation/mutations.xml b/mutation-coverage-reports/webauthn-server-attestation/mutations.xml new file mode 100644 index 000000000..4024aa55a --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/mutations.xml @@ -0,0 +1,326 @@ + + +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderbuilder()Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1;132org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::builder +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderdownload(Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray;1038org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator101com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderdownload(Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray;1040org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator202com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderdownload(Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray;1044org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator315com.yubico.fido.metadata.FidoMetadataDownloaderSpecremoved call to javax/net/ssl/TrustManagerFactory::init +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderdownload(Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray;1046org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator448com.yubico.fido.metadata.FidoMetadataDownloaderSpecremoved call to javax/net/ssl/SSLContext::init +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderdownload(Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray;1048org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator5010com.yubico.fido.metadata.FidoMetadataDownloaderSpecremoved call to javax/net/ssl/HttpsURLConnection::setSSLSocketFactory +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderdownload(Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray;1055org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7114removed call to javax/net/ssl/HttpsURLConnection::setRequestMethod +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderdownload(Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray;1058org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator7817com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::download +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderlambda$loadCachedBlobOnly$0(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/fido/metadata/MetadataBLOB;1014org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::lambda$loadCachedBlobOnly$0 +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadCachedBlob()Lcom/yubico/fido/metadata/MetadataBLOB;718org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator163com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadCachedBlob()Lcom/yubico/fido/metadata/MetadataBLOB;724org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator399negated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadCachedBlob()Lcom/yubico/fido/metadata/MetadataBLOB;732org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator7721com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadCachedBlob()Lcom/yubico/fido/metadata/MetadataBLOB;720org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator276com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadCachedBlob()Lcom/yubico/fido/metadata/MetadataBLOB;734org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator8824com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadCachedBlob()Lcom/yubico/fido/metadata/MetadataBLOB;743org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator11130com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadCachedBlobOnly(Ljava/security/cert/X509Certificate;)Ljava/util/Optional;998org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadCachedBlobOnly(Ljava/security/cert/X509Certificate;)Ljava/util/Optional;1011org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator5010com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlobOnly +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadExplicitBlobOnly(Ljava/security/cert/X509Certificate;)Ljava/util/Optional;985org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderloadExplicitBlobOnly(Ljava/security/cert/X509Certificate;)Ljava/util/Optional;986org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator255com.yubico.fido.metadata.FidoMds3Specreplaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::loadExplicitBlobOnly +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderparseAndMaybeVerifyBlob(Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1084org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderparseAndMaybeVerifyBlob(Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1085org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator113com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndMaybeVerifyBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderparseAndMaybeVerifyBlob(Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1087org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator206com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndMaybeVerifyBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderparseAndVerifyBlob(Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1071org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndVerifyBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderparseBlob(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;1179org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator7620com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderreadAll(Ljava/io/InputStream;)Lcom/yubico/webauthn/data/ByteArray;1190org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::readAll +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderreadCacheFile(Ljava/io/File;)Ljava/util/Optional;1023org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderreadCacheFile(Ljava/io/File;)Ljava/util/Optional;1023org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator83com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderreadCacheFile(Ljava/io/File;)Ljava/util/Optional;1023org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator115com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlob()Lcom/yubico/fido/metadata/MetadataBLOB;821org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator163com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlob()Lcom/yubico/fido/metadata/MetadataBLOB;827org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator399negated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlob()Lcom/yubico/fido/metadata/MetadataBLOB;823org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator276com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlob()Lcom/yubico/fido/metadata/MetadataBLOB;833org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator6115com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;857org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator6418changed conditional boundary +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;837org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;837org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator133com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;855org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4811com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;857org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6418com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;865org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator9526com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;870org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator11731com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;876org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator16141com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;882org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator18446com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;882org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator18748com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;889org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator21053com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;872org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator13134removed call to java/io/FileOutputStream::write +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;877org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator16742com.yubico.fido.metadata.FidoMetadataDownloaderSpecremoved call to java/util/function/Consumer::accept +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;859org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator7420com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;880org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator17444com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;884org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator19650com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderrefreshBlobInternal(Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional;891org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator22055replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;910org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;915org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator162com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;922org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator438com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;924org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5611com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;936org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8819com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;938org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10222com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;946org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator12930com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;952org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator17340com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;928org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7216removed call to java/security/cert/X509Certificate::checkValidity +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;944org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator12429removed call to java/security/cert/X509Certificate::checkValidity +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;948org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator14333com.yubico.fido.metadata.FidoMetadataDownloaderSpecremoved call to java/io/FileOutputStream::write +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;953org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator17941com.yubico.fido.metadata.FidoMetadataDownloaderSpecremoved call to java/util/function/Consumer::accept +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;911org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator101com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::retrieveTrustRootCert +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderretrieveTrustRootCert()Ljava/security/cert/X509Certificate;957org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator18442com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::retrieveTrustRootCert +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1103org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator124com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator247com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1106org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3311negated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1107org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4215negated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1108org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5018com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1123org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator14236com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1150org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator27380com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1159org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator31689com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1146org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator23965com.yubico.fido.metadata.FidoMds3Specremoved call to java/security/Signature::initVerify +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1147org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator26576com.yubico.fido.metadata.FidoMds3Specremoved call to java/security/Signature::update +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1160org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator32290com.yubico.fido.metadata.FidoMds3Specremoved call to java/security/cert/PKIXParameters::addCertStore +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1162org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator33193com.yubico.fido.metadata.FidoMds3Specremoved call to java/security/cert/PKIXParameters::setDate +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyBlob(Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB;1165org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator34396com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::verifyBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyHash(Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)Lcom/yubico/webauthn/data/ByteArray;1201org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator267com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloaderverifyHash(Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)Lcom/yubico/webauthn/data/ByteArray;1202org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator308com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::verifyHash +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService<init>(Lcom/yubico/fido/metadata/MetadataBLOBPayload;Ljava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/security/cert/CertStore;)V103org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService<init>(Lcom/yubico/fido/metadata/MetadataBLOBPayload;Ljava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/security/cert/CertStore;)V104org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService<init>(Lcom/yubico/fido/metadata/MetadataBLOBPayload;Ljava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/security/cert/CertStore;)V105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicebuildAaguidMap(Ljava/util/List;)Ljava/util/HashMap;182org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicebuildAaguidMap(Ljava/util/List;)Ljava/util/HashMap;184org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator245com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService::buildAaguidMap +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicebuildCkiMap(Ljava/util/List;)Ljava/util/HashMap;150org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicebuildCkiMap(Ljava/util/List;)Ljava/util/HashMap;152org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator245com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService::buildCkiMap +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicebuilder()Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1;217org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService::builder +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set;611org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set;612org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator175replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Lcom/yubico/webauthn/RegistrationResult;)Ljava/util/Set;599org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Lcom/yubico/webauthn/RegistrationResult;)Ljava/util/Set;600org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator306replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/List;)Ljava/util/Set;572org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/List;)Ljava/util/Set;573org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator175replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/List;Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set;582org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/List;Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set;582org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator133com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/List;Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set;583org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator278com.yubico.fido.metadata.FidoMds3Specreplaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/List;Ljava/util/Optional;)Ljava/util/Set;498org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/List;Ljava/util/Optional;)Ljava/util/Set;499org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator143com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/List;Ljava/util/Optional;)Ljava/util/Set;563org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator14326com.yubico.fido.metadata.FidoMds3Specreplaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/function/Predicate;)Ljava/util/Set;629org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindEntries(Ljava/util/function/Predicate;)Ljava/util/Set;630org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator5315com.yubico.fido.metadata.FidoMds3Specreplaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicefindTrustRoots(Ljava/util/List;Ljava/util/Optional;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult;643org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator5114com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService::findTrustRoots +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServiceignoreInvalidUpdateAvailableAuthenticatorVersion(Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z131org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator256com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::ignoreInvalidUpdateAvailableAuthenticatorVersion +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServiceignoreInvalidUpdateAvailableAuthenticatorVersion(Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z131org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator256com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::ignoreInvalidUpdateAvailableAuthenticatorVersion +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildAaguidMap$11(Lcom/yubico/fido/metadata/AAGUID;)Z195org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildAaguidMap$11(Lcom/yubico/fido/metadata/AAGUID;)Z195org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator134replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$11 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildAaguidMap$12(Lcom/yubico/fido/metadata/AAGUID;)Z200org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51negated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildAaguidMap$12(Lcom/yubico/fido/metadata/AAGUID;)Z200org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator134replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$12 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildAaguidMap$13(Ljava/util/HashMap;Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)V196org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator202com.yubico.fido.metadata.FidoMds3Specremoved call to java/util/Optional::ifPresent +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildAaguidMap$13(Ljava/util/HashMap;Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)V201org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator386removed call to java/util/Optional::ifPresent +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildAaguidMap$14(Ljava/util/HashSet;Ljava/util/HashSet;)Ljava/util/HashSet;210org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator101replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$14 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildAaguidMap$9(Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/HashSet;191org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$9 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildCkiMap$4(Ljava/lang/String;)Ljava/util/HashSet;158org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$4 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildCkiMap$5(Ljava/lang/String;)Ljava/util/HashSet;165org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$5 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$buildCkiMap$7(Ljava/util/HashSet;Ljava/util/HashSet;)Ljava/util/HashSet;175org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator101replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$7 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findEntries$16(Ljava/security/cert/X509Certificate;)Ljava/lang/String;506org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator133com.yubico.fido.metadata.FidoMds3Specreplaced return value with "" for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$16 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findEntries$17(Lcom/yubico/fido/metadata/AAGUID;)Z517org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findEntries$17(Lcom/yubico/fido/metadata/AAGUID;)Z517org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator134com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$17 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findEntries$18(Ljava/util/List;)Ljava/util/Optional;520org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator102com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findEntries$18(Ljava/util/List;)Ljava/util/Optional;523org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator379replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$18 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findEntries$19(Ljava/lang/String;)Ljava/util/stream/Stream;548org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator224com.yubico.fido.metadata.FidoMds3Specreplaced return value with Stream.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$19 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findEntries$20(Ljava/util/List;Ljava/util/Optional;Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z551org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator203com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$20 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findEntries$20(Ljava/util/List;Ljava/util/Optional;Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z551org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator203com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$20 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findEntries$21(Lcom/yubico/webauthn/RegistrationResult;Ljava/util/List;)Ljava/util/Set;602org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator113replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$21 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findTrustRoots$22(Lcom/yubico/fido/metadata/MetadataStatement;)Ljava/util/stream/Stream;650org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator62com.yubico.fido.metadata.FidoMds3Specreplaced return value with Stream.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findTrustRoots$22 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$findTrustRoots$23(Ljava/security/cert/PolicyNode;)Z654org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator40com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$findTrustRoots$23 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0(Lcom/yubico/fido/metadata/StatusReport;)Z139org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator72com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0(Lcom/yubico/fido/metadata/StatusReport;)Z139org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator72replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1(Ljava/lang/Long;Ljava/lang/Long;)Ljava/lang/Boolean;144org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator82com.yubico.fido.metadata.FidoMds3Specchanged conditional boundary +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1(Ljava/lang/Long;Ljava/lang/Long;)Ljava/lang/Boolean;144org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator82com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1(Ljava/lang/Long;Ljava/lang/Long;)Ljava/lang/Boolean;144org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator176com.yubico.fido.metadata.FidoMds3Specreplaced Boolean return with True for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2(Ljava/lang/Long;Lcom/yubico/fido/metadata/StatusReport;)Z145org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator195com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2(Ljava/lang/Long;Lcom/yubico/fido/metadata/StatusReport;)Z145org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator195com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3(Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;Ljava/lang/Long;)Ljava/lang/Boolean;136org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator185com.yubico.fido.metadata.FidoMds3Specreplaced Boolean return with False for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataServicelambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3(Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;Ljava/lang/Long;)Ljava/lang/Boolean;136org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator185com.yubico.fido.metadata.FidoMds3Specreplaced Boolean return with True for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V235org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V237org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V238org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V239org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3810com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V240org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4813com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V241org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5816com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V242org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6819com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V245org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator7822com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V248org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8825com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatement<init>(Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V251org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator9828com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetAaguid()Ljava/util/Optional;309org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAaguid +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetAaid()Ljava/util/Optional;300org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAaid +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetAlternativeDescriptions()Ljava/util/Optional;327org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAlternativeDescriptions +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetAttachmentHint()Ljava/util/Optional;363org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAttachmentHint +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetAuthenticatorGetInfo()Ljava/util/Optional;408org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAuthenticatorGetInfo +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetCryptoStrength()Ljava/util/Optional;354org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getCryptoStrength +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetDescription()Ljava/util/Optional;318org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getDescription +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetIcon()Ljava/util/Optional;390org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIcon +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetIsFreshUserVerificationRequired()Ljava/util/Optional;345org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIsFreshUserVerificationRequired +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetIsKeyRestricted()Ljava/util/Optional;336org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIsKeyRestricted +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetLegalHeader()Ljava/util/Optional;291org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getLegalHeader +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetSupportedExtensions()Ljava/util/Optional;399org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getSupportedExtensions +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetTcDisplayContentType()Ljava/util/Optional;372org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getTcDisplayContentType +MetadataStatement.javacom.yubico.fido.metadata.MetadataStatementgetTcDisplayPNGCharacteristics()Ljava/util/Optional;381org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getTcDisplayPNGCharacteristics +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetAaguid()Ljava/util/Optional;193org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getAaguid +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetAlgorithms()Ljava/util/Optional;256org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getAlgorithms +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetCertifications()Ljava/util/Optional;337org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getCertifications +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetExtensions()Ljava/util/Optional;184org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getExtensions +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetFirmwareVersion()Ljava/util/Optional;292org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getFirmwareVersion +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetForcePINChange()Ljava/util/Optional;274org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getForcePINChange +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetMaxCredBlobLength()Ljava/util/Optional;301org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredBlobLength +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetMaxCredentialCountInList()Ljava/util/Optional;229org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredentialCountInList +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetMaxCredentialIdLength()Ljava/util/Optional;238org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredentialIdLength +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetMaxMsgSize()Ljava/util/Optional;211org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxMsgSize +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetMaxRPIDsForSetMinPINLength()Ljava/util/Optional;310org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxRPIDsForSetMinPINLength +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetMaxSerializedLargeBlobArray()Ljava/util/Optional;265org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxSerializedLargeBlobArray +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetMinPINLength()Ljava/util/Optional;283org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMinPINLength +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetOptions()Ljava/util/Optional;202org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getOptions +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetPinUvAuthProtocols()Ljava/util/Optional;220org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getPinUvAuthProtocols +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetPreferredPlatformUvAttempts()Ljava/util/Optional;319org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getPreferredPlatformUvAttempts +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetRemainingDiscoverableCredentials()Ljava/util/Optional;346org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getRemainingDiscoverableCredentials +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetTransports()Ljava/util/Optional;247org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getTransports +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetUvModality()Ljava/util/Optional;328org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getUvModality +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfogetVendorPrototypeConfigCommands()Ljava/util/Optional;355org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getVendorPrototypeConfigCommands +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FiltersallOf([Ljava/util/function/Predicate;)Ljava/util/function/Predicate;364org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator50replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::allOf +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$allOf$0(Ljava/lang/Object;Ljava/util/function/Predicate;)Z364org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator61replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$0 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$allOf$0(Ljava/lang/Object;Ljava/util/function/Predicate;)Z364org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator61replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$0 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$allOf$1([Ljava/util/function/Predicate;Ljava/lang/Object;)Z364org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator82replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$1 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$allOf$1([Ljava/util/function/Predicate;Ljava/lang/Object;)Z364org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator82replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$1 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$noAttestationKeyCompromise$4(Lcom/yubico/fido/metadata/StatusReport;)Z400org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator112com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$4 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$noAttestationKeyCompromise$4(Lcom/yubico/fido/metadata/StatusReport;)Z400org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator112com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$4 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$noAttestationKeyCompromise$5(Lcom/yubico/fido/metadata/StatusReport;Ljava/security/cert/X509Certificate;)Z408org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator257com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$5 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$noAttestationKeyCompromise$5(Lcom/yubico/fido/metadata/StatusReport;Ljava/security/cert/X509Certificate;)Z408org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator257replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$5 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$noAttestationKeyCompromise$6(Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;Lcom/yubico/fido/metadata/StatusReport;)Z404org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$noAttestationKeyCompromise$6(Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;Lcom/yubico/fido/metadata/StatusReport;)Z406org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator176com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$noAttestationKeyCompromise$6(Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;Lcom/yubico/fido/metadata/StatusReport;)Z404org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator289replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$6 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$noAttestationKeyCompromise$7(Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;)Z397org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator185com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$7 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$noAttestationKeyCompromise$7(Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;)Z397org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator185com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$7 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$notRevoked$2(Lcom/yubico/fido/metadata/StatusReport;)Z378org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator72com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$2 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$notRevoked$2(Lcom/yubico/fido/metadata/StatusReport;)Z378org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator72com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$2 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$notRevoked$3(Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z376org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator123com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$3 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filterslambda$notRevoked$3(Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z376org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator123com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$3 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FiltersnoAttestationKeyCompromise()Ljava/util/function/Predicate;396org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::noAttestationKeyCompromise +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FiltersnotRevoked()Ljava/util/function/Predicate;375org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::notRevoked +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilderbuild()Lcom/yubico/fido/metadata/FidoMetadataDownloader;156org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator391com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::build +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilderclock(Ljava/time/Clock;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;539org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilderclock(Ljava/time/Clock;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;541org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::clock +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilderfinishRequiredSteps(Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5;Ljava/io/File;Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;514org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator5922com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::finishRequiredSteps +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuildertrustHttpsCerts([Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;592org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuildertrustHttpsCerts([Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;596org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator205com.yubico.fido.metadata.FidoMetadataDownloaderSpecremoved call to java/security/KeyStore::load +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuildertrustHttpsCerts([Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;607org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator6113com.yubico.fido.metadata.FidoMetadataDownloaderSpecremoved call to java/security/KeyStore::setCertificateEntry +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuildertrustHttpsCerts([Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;616org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator9118com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::trustHttpsCerts +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilderuseCrls(Ljava/security/cert/CertStore;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;573org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::useCrls +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilderuseCrls(Ljava/util/Collection;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;557org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilderuseCrls(Ljava/util/Collection;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;559org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator216com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::useCrls +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilderverifyDownloadsOnly(Z)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;636org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::verifyDownloadsOnly +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntry<init>(Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Lcom/yubico/fido/metadata/MetadataStatement;Ljava/util/List;Ljava/util/List;Ljava/time/LocalDate;Ljava/net/URL;Lcom/yubico/webauthn/data/ByteArray;)V98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntry<init>(Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Lcom/yubico/fido/metadata/MetadataStatement;Ljava/util/List;Ljava/util/List;Ljava/time/LocalDate;Ljava/net/URL;Lcom/yubico/webauthn/data/ByteArray;)V99org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntrygetAaguid()Ljava/util/Optional;134org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getAaguid +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntrygetAaid()Ljava/util/Optional;125org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getAaid +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntrygetMetadataStatement()Ljava/util/Optional;143org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getMetadataStatement +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntrygetRogueListHash()Ljava/util/Optional;170org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getRogueListHash +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntrygetRogueListURL()Ljava/util/Optional;161org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getRogueListURL +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntrygetTimeOfLastStatusChange()Ljava/util/Optional;152org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.fido.metadata.JsonIoSpecreplaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getTimeOfLastStatusChange +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntrylambda$new$0(Lcom/yubico/fido/metadata/StatusReport;)Z112org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator72com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataBLOBPayloadEntry.javacom.yubico.fido.metadata.MetadataBLOBPayloadEntrylambda$new$0(Lcom/yubico/fido/metadata/StatusReport;)Z112org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator155com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::lambda$new$0 +AAGUID.javacom.yubico.fido.metadata.AAGUID<init>(Lcom/yubico/webauthn/data/ByteArray;)V54org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator122com.yubico.fido.metadata.FidoMds3Specnegated conditional +AAGUID.javacom.yubico.fido.metadata.AAGUID<init>(Lcom/yubico/webauthn/data/ByteArray;)V53org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator377removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +AAGUID.javacom.yubico.fido.metadata.AAGUIDasBytes()Lcom/yubico/webauthn/data/ByteArray;68org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator50com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/AAGUID::asBytes +AAGUID.javacom.yubico.fido.metadata.AAGUIDasGuidString()Ljava/lang/String;87org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator607com.yubico.fido.metadata.FidoMds3Specreplaced return value with "" for com/yubico/fido/metadata/AAGUID::asGuidString +AAGUID.javacom.yubico.fido.metadata.AAGUIDasHexString()Ljava/lang/String;76org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with "" for com/yubico/fido/metadata/AAGUID::asHexString +AAGUID.javacom.yubico.fido.metadata.AAGUIDfromString(Ljava/lang/String;)Lcom/yubico/fido/metadata/AAGUID;124org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/AAGUID::fromString +AAGUID.javacom.yubico.fido.metadata.AAGUIDisZero()Z101org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with false for com/yubico/fido/metadata/AAGUID::isZero +AAGUID.javacom.yubico.fido.metadata.AAGUIDisZero()Z101org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71com.yubico.fido.metadata.FidoMds3Specreplaced boolean return with true for com/yubico/fido/metadata/AAGUID::isZero +AAGUID.javacom.yubico.fido.metadata.AAGUIDparse(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;106org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator112com.yubico.fido.metadata.FidoMds3Specnegated conditional +AAGUID.javacom.yubico.fido.metadata.AAGUIDparse(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;108org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator4817com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/AAGUID::parse +StatusReport.javacom.yubico.fido.metadata.StatusReportgetAuthenticatorVersion()Ljava/util/Optional;115org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getAuthenticatorVersion +StatusReport.javacom.yubico.fido.metadata.StatusReportgetCertificate()Ljava/util/Optional;125org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificate +StatusReport.javacom.yubico.fido.metadata.StatusReportgetCertificateNumber()Ljava/util/Optional;169org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificateNumber +StatusReport.javacom.yubico.fido.metadata.StatusReportgetCertificationDescriptor()Ljava/util/Optional;160org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationDescriptor +StatusReport.javacom.yubico.fido.metadata.StatusReportgetCertificationPolicyVersion()Ljava/util/Optional;178org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationPolicyVersion +StatusReport.javacom.yubico.fido.metadata.StatusReportgetCertificationRequirementsVersion()Ljava/util/Optional;187org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationRequirementsVersion +StatusReport.javacom.yubico.fido.metadata.StatusReportgetEffectiveDate()Ljava/util/Optional;106org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getEffectiveDate +StatusReport.javacom.yubico.fido.metadata.StatusReportgetUrl()Ljava/util/Optional;135org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator102replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getUrl +StatusReport.javacom.yubico.fido.metadata.StatusReportgetUrlAsString()Ljava/util/Optional;151org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getUrlAsString +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilderbuild()Lcom/yubico/fido/metadata/FidoMetadataService;339org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator151com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::build +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuildercertStore(Ljava/security/cert/CertStore;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;322org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuildercertStore(Ljava/security/cert/CertStore;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;324org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::certStore +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilderfilter(Ljava/util/function/Predicate;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;308org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilderfilter(Ljava/util/function/Predicate;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;310org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::filter +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilderprefilter(Ljava/util/function/Predicate;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;275org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilderprefilter(Ljava/util/function/Predicate;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;277org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::prefilter +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2downloadTrustRoot(Ljava/net/URL;Ljava/util/Set;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3;295org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2downloadTrustRoot(Ljava/net/URL;Ljava/util/Set;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3;295org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator133com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2downloadTrustRoot(Ljava/net/URL;Ljava/util/Set;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3;296org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator268com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2downloadTrustRoot(Ljava/net/URL;Ljava/util/Set;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3;299org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator4512com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::downloadTrustRoot +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2useDefaultTrustRoot()Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3;266org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator194replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::useDefaultTrustRoot +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2useTrustRoot(Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4;308org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2useTrustRoot(Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4;309org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator285com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::useTrustRoot +AlternativeDescriptions.javacom.yubico.fido.metadata.AlternativeDescriptionsget(Ljava/lang/String;)Ljava/util/Optional;42org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator296changed conditional boundary +AlternativeDescriptions.javacom.yubico.fido.metadata.AlternativeDescriptionsget(Ljava/lang/String;)Ljava/util/Optional;38org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator71negated conditional +AlternativeDescriptions.javacom.yubico.fido.metadata.AlternativeDescriptionsget(Ljava/lang/String;)Ljava/util/Optional;42org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator296negated conditional +AlternativeDescriptions.javacom.yubico.fido.metadata.AlternativeDescriptionsget(Ljava/lang/String;)Ljava/util/Optional;42org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator368negated conditional +AlternativeDescriptions.javacom.yubico.fido.metadata.AlternativeDescriptionsget(Ljava/lang/String;)Ljava/util/Optional;39org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator164replaced return value with Optional.empty for com/yubico/fido/metadata/AlternativeDescriptions::get +AlternativeDescriptions.javacom.yubico.fido.metadata.AlternativeDescriptionsget(Ljava/lang/String;)Ljava/util/Optional;43org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator4711replaced return value with Optional.empty for com/yubico/fido/metadata/AlternativeDescriptions::get +MetadataBLOBHeader.javacom.yubico.fido.metadata.MetadataBLOBHeader<init>(Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/util/List;)V58org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataBLOBHeader.javacom.yubico.fido.metadata.MetadataBLOBHeader<init>(Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/util/List;)V64org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator364com.yubico.fido.metadata.FidoMds3Specnegated conditional +MetadataBLOBHeader.javacom.yubico.fido.metadata.MetadataBLOBHeader<init>(Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/util/List;)V64org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator406com.yubico.fido.metadata.JsonIoSpecnegated conditional +MetadataBLOBHeader.javacom.yubico.fido.metadata.MetadataBLOBHeadergetTyp()Ljava/util/Optional;74org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getTyp +MetadataBLOBHeader.javacom.yubico.fido.metadata.MetadataBLOBHeadergetX5c()Ljava/util/Optional;90org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getX5c +MetadataBLOBHeader.javacom.yubico.fido.metadata.MetadataBLOBHeadergetX5u()Ljava/util/Optional;82org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getX5u +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializerlambda$serialize$0(Ljava/lang/Integer;Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Ljava/lang/Integer;377org.pitest.mutationtest.engine.gregor.mutators.MathMutator72com.yubico.fido.metadata.JsonIoSpecReplaced bitwise OR with AND +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializerlambda$serialize$0(Ljava/lang/Integer;Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Ljava/lang/Integer;377org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator93com.yubico.fido.metadata.JsonIoSpecreplaced Integer return value with 0 for com/yubico/fido/metadata/AuthenticatorGetInfo$IntFromSetJsonSerializer::lambda$serialize$0 +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializerlambda$serialize$1(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;377org.pitest.mutationtest.engine.gregor.mutators.MathMutator72Replaced bitwise OR with AND +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializerlambda$serialize$1(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;377org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator93replaced Integer return value with 0 for com/yubico/fido/metadata/AuthenticatorGetInfo$IntFromSetJsonSerializer::lambda$serialize$1 +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializerserialize(Ljava/util/Set;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V376org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator174com.yubico.fido.metadata.JsonIoSpecremoved call to com/fasterxml/jackson/core/JsonGenerator::writeNumber +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4downloadBlob(Ljava/net/URL;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5;423org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4downloadBlob(Ljava/net/URL;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5;424org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator204com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::downloadBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4useBlob(Ljava/lang/String;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;445org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4useBlob(Ljava/lang/String;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;446org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator245com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::useBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4useDefaultBlob()Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5;405org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator102replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::useDefaultBlob +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5useBlobCache(Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;503org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5useBlobCache(Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;504org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator143com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5useBlobCache(Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;505org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator287com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5::useBlobCache +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5useBlobCacheFile(Ljava/io/File;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;479org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5useBlobCacheFile(Ljava/io/File;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder;480org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator184com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5::useBlobCacheFile +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3useTrustRootCache(Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4;365org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3useTrustRootCache(Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4;366org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator143com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3useTrustRootCache(Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4;367org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator317com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3::useTrustRootCache +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3useTrustRootCacheFile(Ljava/io/File;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4;342org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3useTrustRootCacheFile(Ljava/io/File;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4;343org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator214com.yubico.fido.metadata.FidoMetadataDownloaderSpecreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3::useTrustRootCacheFile +BiometricAccuracyDescriptor.javacom.yubico.fido.metadata.BiometricAccuracyDescriptorgetBlockSlowdown()Ljava/util/Optional;73org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getBlockSlowdown +BiometricAccuracyDescriptor.javacom.yubico.fido.metadata.BiometricAccuracyDescriptorgetMaxRetries()Ljava/util/Optional;64org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getMaxRetries +BiometricAccuracyDescriptor.javacom.yubico.fido.metadata.BiometricAccuracyDescriptorgetMaxTemplates()Ljava/util/Optional;55org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getMaxTemplates +BiometricAccuracyDescriptor.javacom.yubico.fido.metadata.BiometricAccuracyDescriptorgetSelfAttestedFAR()Ljava/util/Optional;46org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getSelfAttestedFAR +BiometricAccuracyDescriptor.javacom.yubico.fido.metadata.BiometricAccuracyDescriptorgetSelfAttestedFRR()Ljava/util/Optional;37org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getSelfAttestedFRR +BiometricStatusReport.javacom.yubico.fido.metadata.BiometricStatusReportgetCertificateNumber()Ljava/util/Optional;67org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificateNumber +BiometricStatusReport.javacom.yubico.fido.metadata.BiometricStatusReportgetCertificationDescriptor()Ljava/util/Optional;58org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationDescriptor +BiometricStatusReport.javacom.yubico.fido.metadata.BiometricStatusReportgetCertificationPolicyVersion()Ljava/util/Optional;76org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationPolicyVersion +BiometricStatusReport.javacom.yubico.fido.metadata.BiometricStatusReportgetCertificationRequirementsVersion()Ljava/util/Optional;85org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationRequirementsVersion +BiometricStatusReport.javacom.yubico.fido.metadata.BiometricStatusReportgetEffectiveDate()Ljava/util/Optional;49org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getEffectiveDate +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfo$SetFromIntJsonDeserializerdeserialize(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;)Ljava/util/Set;364org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator237com.yubico.fido.metadata.JsonIoSpecreplaced return value with Collections.emptySet for com/yubico/fido/metadata/AuthenticatorGetInfo$SetFromIntJsonDeserializer::deserialize +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfo$SetFromIntJsonDeserializerlambda$deserialize$0(ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z365org.pitest.mutationtest.engine.gregor.mutators.MathMutator61com.yubico.fido.metadata.JsonIoSpecReplaced bitwise AND with OR +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfo$SetFromIntJsonDeserializerlambda$deserialize$0(ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z365org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator71com.yubico.fido.metadata.JsonIoSpecnegated conditional +AuthenticatorGetInfo.javacom.yubico.fido.metadata.AuthenticatorGetInfo$SetFromIntJsonDeserializerlambda$deserialize$0(ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z365org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator154com.yubico.fido.metadata.JsonIoSpecreplaced boolean return with true for com/yubico/fido/metadata/AuthenticatorGetInfo$SetFromIntJsonDeserializer::lambda$deserialize$0 +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder$Step1useBlob(Lcom/yubico/fido/metadata/MetadataBLOB;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;240org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder$Step1useBlob(Lcom/yubico/fido/metadata/MetadataBLOB;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;241org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator175com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1::useBlob +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder$Step1useBlob(Lcom/yubico/fido/metadata/MetadataBLOBPayload;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;253org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder$Step1useBlob(Lcom/yubico/fido/metadata/MetadataBLOBPayload;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder;254org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator184com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1::useBlob +CertToBase64Converter.javacom.yubico.fido.metadata.CertToBase64Converterconvert(Ljava/security/cert/X509Certificate;)Ljava/lang/String;14org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator103com.yubico.fido.metadata.JsonIoSpecreplaced return value with "" for com/yubico/fido/metadata/CertToBase64Converter::convert +CertToBase64Converter.javacom.yubico.fido.metadata.CertToBase64ConvertergetInputType(Lcom/fasterxml/jackson/databind/type/TypeFactory;)Lcom/fasterxml/jackson/databind/JavaType;22org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61replaced return value with null for com/yubico/fido/metadata/CertToBase64Converter::getInputType +CertToBase64Converter.javacom.yubico.fido.metadata.CertToBase64ConvertergetOutputType(Lcom/fasterxml/jackson/databind/type/TypeFactory;)Lcom/fasterxml/jackson/databind/JavaType;27org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.fido.metadata.JsonIoSpecreplaced return value with null for com/yubico/fido/metadata/CertToBase64Converter::getOutputType +CertFromBase64Converter.javacom.yubico.fido.metadata.CertFromBase64Converterconvert(Ljava/lang/String;)Ljava/security/cert/X509Certificate;15org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator154com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::convert +CertFromBase64Converter.javacom.yubico.fido.metadata.CertFromBase64ConvertergetInputType(Lcom/fasterxml/jackson/databind/type/TypeFactory;)Lcom/fasterxml/jackson/databind/JavaType;24org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::getInputType +CertFromBase64Converter.javacom.yubico.fido.metadata.CertFromBase64ConvertergetOutputType(Lcom/fasterxml/jackson/databind/type/TypeFactory;)Lcom/fasterxml/jackson/databind/JavaType;29org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::getOutputType +FidoMetadataDownloaderException.javacom.yubico.fido.metadata.FidoMetadataDownloaderException<init>(Lcom/yubico/fido/metadata/FidoMetadataDownloaderException$Reason;)V31org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator101com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloaderException.javacom.yubico.fido.metadata.FidoMetadataDownloaderException<init>(Lcom/yubico/fido/metadata/FidoMetadataDownloaderException$Reason;Ljava/lang/Throwable;)V25org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator91com.yubico.fido.metadata.FidoMetadataDownloaderSpecnegated conditional +FidoMetadataDownloaderException.javacom.yubico.fido.metadata.FidoMetadataDownloaderExceptiongetMessage()Ljava/lang/String;37org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with "" for com/yubico/fido/metadata/FidoMetadataDownloaderException::getMessage +PatternAccuracyDescriptor.javacom.yubico.fido.metadata.PatternAccuracyDescriptorgetBlockSlowdown()Ljava/util/Optional;57org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/PatternAccuracyDescriptor::getBlockSlowdown +PatternAccuracyDescriptor.javacom.yubico.fido.metadata.PatternAccuracyDescriptorgetMaxRetries()Ljava/util/Optional;48org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/PatternAccuracyDescriptor::getMaxRetries +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1expectLegalHeader([Ljava/lang/String;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2;220org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.fido.metadata.FidoMds3Specnegated conditional +FidoMetadataDownloader.javacom.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1expectLegalHeader([Ljava/lang/String;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2;221org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator227com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1::expectLegalHeader +AAID.javacom.yubico.fido.metadata.AAIDvalidate(Ljava/lang/String;)Ljava/lang/String;66org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator72com.yubico.fido.metadata.FidoMds3Specnegated conditional +AAID.javacom.yubico.fido.metadata.AAIDvalidate(Ljava/lang/String;)Ljava/lang/String;67org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator113com.yubico.fido.metadata.FidoMds3Specreplaced return value with "" for com/yubico/fido/metadata/AAID::validate +CodeAccuracyDescriptor.javacom.yubico.fido.metadata.CodeAccuracyDescriptorgetBlockSlowdown()Ljava/util/Optional;53org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/CodeAccuracyDescriptor::getBlockSlowdown +CodeAccuracyDescriptor.javacom.yubico.fido.metadata.CodeAccuracyDescriptorgetMaxRetries()Ljava/util/Optional;44org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/CodeAccuracyDescriptor::getMaxRetries +UnexpectedLegalHeader.javacom.yubico.fido.metadata.UnexpectedLegalHeadergetCachedBlob()Ljava/util/Optional;37org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/UnexpectedLegalHeader::getCachedBlob +JacksonCodecs.javacom.yubico.fido.metadata.JacksonCodecsjsonWithDefaultEnums()Lcom/fasterxml/jackson/databind/ObjectMapper;9org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator112com.yubico.fido.metadata.FidoMds3Specreplaced return value with null for com/yubico/fido/metadata/JacksonCodecs::jsonWithDefaultEnums +FidoMetadataService.javacom.yubico.fido.metadata.FidoMetadataService$Filters$AuthenticatorToBeFilteredgetAaguid()Ljava/util/Optional;449org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered::getAaguid + diff --git a/mutation-coverage-reports/webauthn-server-attestation/style.css b/mutation-coverage-reports/webauthn-server-attestation/style.css new file mode 100644 index 000000000..303bfba78 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-attestation/style.css @@ -0,0 +1,563 @@ +html, body, div, span, p, blockquote, pre { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} + +body{ + line-height: 1; + color: black; + background: white; + margin-left: 20px; +} + +.src { + border: 1px solid #dddddd; + padding-top: 10px; + padding-right: 5px; + padding-left: 5px; + font-family: Consolas, Courier, monospace; +} + +.covered, .COVERED { + background-color: #ddffdd; +} + +.uncovered, .UNCOVERED { + background-color: #ffdddd; +} + +.killed, .KILLED { + background-color: #aaffaa; +} + +.survived, .SURVIVED { + background-color: #ffaaaa; +} + +.uncertain, .UNCERTAIN { + background-color: #dde7ef; +} + +.run_error, .RUN_ERROR { + background-color: #dde7ef; +} + +.na { + background-color: #eeeeee; +} + +.timed_out, .TIMED_OUT { + background-color: #dde7ef; +} + +.non_viable, .NON_VIABLE { + background-color: #aaffaa; +} + +.memory_error, .MEMORY_ERROR { + background-color: #dde7ef; +} + +.not_started, .NO_STARTED { + background-color: #dde7ef; color : red +} + +.no_coverage, .NO_COVERAGE { + background-color: #ffaaaa; +} + +.tests { + width: 50%; + float: left; +} + +.mutees { + float: right; + width: 50%; +} + +.unit { + padding-top: 20px; + clear: both; +} + +.coverage_bar { + display: inline-block; + height: 1.1em; + width: 130px; + background: #FAA; + margin: 0 5px; + vertical-align: middle; + border: 1px solid #AAA; + position: relative; +} + +.coverage_complete { + display: inline-block; + height: 100%; + background: #DFD; + float: left; +} + +.coverage_legend { + position: absolute; + height: 100%; + width: 100%; + left: 0; + top: 0; + text-align: center; +} + +.line, .mut { + vertical-align: middle; +} + +.coverage_percentage { + display: inline-block; + width: 3em; + text-align: right; +} + +.pop { + outline:none; +} + +.pop strong { + line-height: 30px; +} + +.pop { + text-decoration: none; +} + +.pop span { + z-index: 10; + display: none; + padding: 14px 20px; + margin-top: -30px; + margin-left: 28px; + width: 800px; + line-height: 16px; + word-wrap: break-word; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + -moz-box-shadow: 5px 5px 8px #CCC; + -webkit-box-shadow: 5px 5px 8px #CCC; + box-shadow: 5px 5px 8px #CCC; +} + +.pop:hover span { + display: inline; + position: absolute; + color: #111; + border: 1px solid #DCA; + background: #fffAF0; +} + +.width-1 { + width: 1%; +} + +.width-2 { + width: 2%; +} + +.width-3 { + width: 3%; +} + +.width-4 { + width: 4%; +} + +.width-5 { + width: 5%; +} + +.width-6 { + width: 6%; +} + +.width-7 { + width: 7%; +} + +.width-8 { + width: 8%; +} + +.width-9 { + width: 9%; +} + +.width-10 { + width: 10%; +} + +.width-11 { + width: 11%; +} + +.width-12 { + width: 12%; +} + +.width-13 { + width: 13%; +} + +.width-14 { + width: 14%; +} + +.width-15 { + width: 15%; +} + +.width-16 { + width: 16%; +} + +.width-17 { + width: 17%; +} + +.width-18 { + width: 18%; +} + +.width-19 { + width: 19%; +} + +.width-20 { + width: 20%; +} + +.width-21 { + width: 21%; +} + +.width-22 { + width: 22%; +} + +.width-23 { + width: 23%; +} + +.width-24 { + width: 24%; +} + +.width-25 { + width: 25%; +} + +.width-26 { + width: 26%; +} + +.width-27 { + width: 27%; +} + +.width-28 { + width: 28%; +} + +.width-29 { + width: 29%; +} + +.width-30 { + width: 30%; +} + +.width-31 { + width: 31%; +} + +.width-32 { + width: 32%; +} + +.width-33 { + width: 33%; +} + +.width-34 { + width: 34%; +} + +.width-35 { + width: 35%; +} + +.width-36 { + width: 36%; +} + +.width-37 { + width: 37%; +} + +.width-38 { + width: 38%; +} + +.width-39 { + width: 39%; +} + +.width-40 { + width: 40%; +} + +.width-41 { + width: 41%; +} + +.width-42 { + width: 42%; +} + +.width-43 { + width: 43%; +} + +.width-44 { + width: 44%; +} + +.width-45 { + width: 45%; +} + +.width-46 { + width: 46%; +} + +.width-47 { + width: 47%; +} + +.width-48 { + width: 48%; +} + +.width-49 { + width: 49%; +} + +.width-50 { + width: 50%; +} + +.width-51 { + width: 51%; +} + +.width-52 { + width: 52%; +} + +.width-53 { + width: 53%; +} + +.width-54 { + width: 54%; +} + +.width-55 { + width: 55%; +} + +.width-56 { + width: 56%; +} + +.width-57 { + width: 57%; +} + +.width-58 { + width: 58%; +} + +.width-59 { + width: 59%; +} + +.width-60 { + width: 60%; +} + +.width-61 { + width: 61%; +} + +.width-62 { + width: 62%; +} + +.width-63 { + width: 63%; +} + +.width-64 { + width: 64%; +} + +.width-65 { + width: 65%; +} + +.width-66 { + width: 66%; +} + +.width-67 { + width: 67%; +} + +.width-68 { + width: 68%; +} + +.width-69 { + width: 69%; +} + +.width-70 { + width: 70%; +} + +.width-71 { + width: 71%; +} + +.width-72 { + width: 72%; +} + +.width-73 { + width: 73%; +} + +.width-74 { + width: 74%; +} + +.width-75 { + width: 75%; +} + +.width-76 { + width: 76%; +} + +.width-77 { + width: 77%; +} + +.width-78 { + width: 78%; +} + +.width-79 { + width: 79%; +} + +.width-80 { + width: 80%; +} + +.width-81 { + width: 81%; +} + +.width-82 { + width: 82%; +} + +.width-83 { + width: 83%; +} + +.width-84 { + width: 84%; +} + +.width-85 { + width: 85%; +} + +.width-86 { + width: 86%; +} + +.width-87 { + width: 87%; +} + +.width-88 { + width: 88%; +} + +.width-89 { + width: 89%; +} + +.width-90 { + width: 90%; +} + +.width-91 { + width: 91%; +} + +.width-92 { + width: 92%; +} + +.width-93 { + width: 93%; +} + +.width-94 { + width: 94%; +} + +.width-95 { + width: 95%; +} + +.width-96 { + width: 96%; +} + +.width-97 { + width: 97%; +} + +.width-98 { + width: 98%; +} + +.width-99 { + width: 99%; +} + +.width-100 { + width: 100%; +} \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.attestation/AttestationTrustSource.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.attestation/AttestationTrustSource.java.html new file mode 100644 index 000000000..62c6178ad --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.attestation/AttestationTrustSource.java.html @@ -0,0 +1,4661 @@ + + + + + + + + + +

AttestationTrustSource.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.attestation;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +28 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +29 + + + + + + +
import java.security.cert.CertStore;
+ +30 + + + + + + +
import java.security.cert.PolicyNode;
+ +31 + + + + + + +
import java.security.cert.X509Certificate;
+ +32 + + + + + + +
import java.util.List;
+ +33 + + + + + + +
import java.util.Optional;
+ +34 + + + + + + +
import java.util.Set;
+ +35 + + + + + + +
import java.util.function.Predicate;
+ +36 + + + + + + +
import lombok.Builder;
+ +37 + + + + + + +
import lombok.NonNull;
+ +38 + + + + + + +
import lombok.Value;
+ +39 + + + + + + +
+ +40 + + + + + + +
/** Abstraction of a repository which can look up trust roots for authenticator attestation. */
+ +41 + + + + + + +
public interface AttestationTrustSource {
+ +42 + + + + + + +
+ +43 + + + + + + +
  /**
+ +44 + + + + + + +
   * Attempt to look up attestation trust roots for an authenticator.
+ +45 + + + + + + +
   *
+ +46 + + + + + + +
   * <p>Note that it is possible for the same trust root to be used for different certificate
+ +47 + + + + + + +
   * chains. For example, an authenticator vendor may make two different authenticator models, each
+ +48 + + + + + + +
   * with its own attestation leaf certificate but both signed by the same attestation root
+ +49 + + + + + + +
   * certificate. If a Relying Party trusts one of those authenticator models but not the other,
+ +50 + + + + + + +
   * then its implementation of this method MUST return an empty set for the untrusted certificate
+ +51 + + + + + + +
   * chain.
+ +52 + + + + + + +
   *
+ +53 + + + + + + +
   * @param attestationCertificateChain the attestation certificate chain for the authenticator.
+ +54 + + + + + + +
   * @param aaguid the AAGUID of the authenticator, if available.
+ +55 + + + + + + +
   * @return A set of attestation root certificates trusted to attest for this authenticator, if any
+ +56 + + + + + + +
   *     are available. If no trust roots are found, or if this authenticator is not trusted, return
+ +57 + + + + + + +
   *     an empty result. Implementations MAY reuse the same result object, or parts of it, for
+ +58 + + + + + + +
   *     multiple calls of this method, even with different arguments, but MUST return an empty set
+ +59 + + + + + + +
   *     of trust roots for authenticators that should not be trusted.
+ +60 + + + + + + +
   */
+ +61 + + + + + + +
  TrustRootsResult findTrustRoots(
+ +62 + + + + + + +
      List<X509Certificate> attestationCertificateChain, Optional<ByteArray> aaguid);
+ +63 + + + + + + +
+ +64 + + + + + + +
  /**
+ +65 + + + + + + +
   * A result of looking up attestation trust roots for a particular attestation statement.
+ +66 + + + + + + +
   *
+ +67 + + + + + + +
   * <p>This primarily consists of a set of trust root certificates - see {@link
+ +68 + + + + + + +
   * TrustRootsResultBuilder#trustRoots(Set) trustRoots(Set)} - but may also:
+ +69 + + + + + + +
   *
+ +70 + + + + + + +
   * <ul>
+ +71 + + + + + + +
   *   <li>include a {@link CertStore} of additional CRLs and/or intermediate certificates to use
+ +72 + + + + + + +
   *       during certificate path validation - see {@link
+ +73 + + + + + + +
   *       TrustRootsResultBuilder#certStore(CertStore) certStore(CertStore)};
+ +74 + + + + + + +
   *   <li>disable certificate revocation checking for the relevant attestation statement - see
+ +75 + + + + + + +
   *       {@link TrustRootsResultBuilder#enableRevocationChecking(boolean)
+ +76 + + + + + + +
   *       enableRevocationChecking(boolean)}; and/or
+ +77 + + + + + + +
   *   <li>define a policy tree validator for the PKIX policy tree result - see {@link
+ +78 + + + + + + +
   *       TrustRootsResultBuilder#policyTreeValidator(Predicate) policyTreeValidator(Predicate)}.
+ +79 + + + + + + +
   * </ul>
+ +80 + + + + + + +
   */
+ +81 + + + + + + +
  @Value
+ +82 + + + + + + +
  @Builder(toBuilder = true)
+ +83 + + + + + + +
  class TrustRootsResult {
+ +84 + + + + + + +
+ +85 + + + + + + +
    /**
+ +86 + + + + + + +
     * A set of attestation root certificates trusted to certify the relevant attestation statement.
+ +87 + + + + + + +
     * If the attestation statement is not trusted, or if no trust roots were found, this should be
+ +88 + + + + + + +
     * an empty set.
+ +89 + + + + + + +
     */
+ +90 + + + + + + +
    @NonNull private final Set<X509Certificate> trustRoots;
+ +91 + + + + + + +
+ +92 + + + + + + +
    /**
+ +93 + + + + + + +
     * A {@link CertStore} of additional CRLs and/or intermediate certificates to use during
+ +94 + + + + + + +
     * certificate path validation, if any. This will not be used if {@link
+ +95 + + + + + + +
     * TrustRootsResultBuilder#trustRoots(Set) trustRoots} is empty.
+ +96 + + + + + + +
     *
+ +97 + + + + + + +
     * <p>Any certificates included in this {@link CertStore} are NOT considered trusted; they will
+ +98 + + + + + + +
     * be trusted only if they chain to any of the {@link TrustRootsResultBuilder#trustRoots(Set)
+ +99 + + + + + + +
     * trustRoots}.
+ +100 + + + + + + +
     *
+ +101 + + + + + + +
     * <p>The default is <code>null</code>.
+ +102 + + + + + + +
     */
+ +103 + + + + + + +
    @Builder.Default private final CertStore certStore = null;
+ +104 + + + + + + +
+ +105 + + + + + + +
    /**
+ +106 + + + + + + +
     * Whether certificate revocation should be checked during certificate path validation.
+ +107 + + + + + + +
     *
+ +108 + + + + + + +
     * <p>The default is <code>true</code>.
+ +109 + + + + + + +
     */
+ +110 + + + + + + +
    @Builder.Default private final boolean enableRevocationChecking = true;
+ +111 + + + + + + +
+ +112 + + + + + + +
    /**
+ +113 + + + + + + +
     * If non-null, the PolicyQualifiersRejected flag will be set to false during certificate path
+ +114 + + + + + + +
     * validation. See {@link
+ +115 + + + + + + +
     * java.security.cert.PKIXParameters#setPolicyQualifiersRejected(boolean)}.
+ +116 + + + + + + +
     *
+ +117 + + + + + + +
     * <p>The given {@link Predicate} will be used to validate the policy tree. The {@link
+ +118 + + + + + + +
     * Predicate} should return <code>true</code> if the policy tree is acceptable, and <code>false
+ +119 + + + + + + +
     * </code> otherwise.
+ +120 + + + + + + +
     *
+ +121 + + + + + + +
     * <p>Depending on your <code>"PKIX"</code> JCA provider configuration, this may be required if
+ +122 + + + + + + +
     * any certificate in the certificate path contains a certificate policies extension marked
+ +123 + + + + + + +
     * critical. If this is not set, then such a certificate will be rejected by the certificate
+ +124 + + + + + + +
     * path validator from the default provider.
+ +125 + + + + + + +
     *
+ +126 + + + + + + +
     * <p>Consult the <a
+ +127 + + + + + + +
     * href="https://docs.oracle.com/en/java/javase/17/security/java-pki-programmers-guide.html#GUID-3AD41382-E729-469B-83EE-CB2FE66D71D8">Java
+ +128 + + + + + + +
     * PKI Programmer's Guide</a> for how to use the {@link PolicyNode} argument of the {@link
+ +129 + + + + + + +
     * Predicate}.
+ +130 + + + + + + +
     *
+ +131 + + + + + + +
     * <p>The default is <code>null</code>.
+ +132 + + + + + + +
     */
+ +133 + + + + + + +
    @Builder.Default private final Predicate<PolicyNode> policyTreeValidator = null;
+ +134 + + + + + + +
+ +135 + + + + + + +
    private TrustRootsResult(
+ +136 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        @NonNull Set<X509Certificate> trustRoots,
+ +137 + + + + + + +
        CertStore certStore,
+ +138 + + + + + + +
        boolean enableRevocationChecking,
+ +139 + + + + + + +
        Predicate<PolicyNode> policyTreeValidator) {
+ +140 + + + + + + +
      this.trustRoots = CollectionUtil.immutableSet(trustRoots);
+ +141 + + + + + + +
      this.certStore = certStore;
+ +142 + + + + + + +
      this.enableRevocationChecking = enableRevocationChecking;
+ +143 + + + + + + +
      this.policyTreeValidator = policyTreeValidator;
+ +144 + + + + + + +
    }
+ +145 + + + + + + +
+ +146 + + + + + + +
    /**
+ +147 + + + + + + +
     * A {@link CertStore} of additional CRLs and/or intermediate certificates to use during
+ +148 + + + + + + +
     * certificate path validation, if any. This will not be used if {@link
+ +149 + + + + + + +
     * TrustRootsResultBuilder#trustRoots(Set) trustRoots} is empty.
+ +150 + + + + + + +
     *
+ +151 + + + + + + +
     * <p>Any certificates included in this {@link CertStore} are NOT considered trusted; they will
+ +152 + + + + + + +
     * be trusted only if they chain to any of the {@link TrustRootsResultBuilder#trustRoots(Set)
+ +153 + + + + + + +
     * trustRoots}.
+ +154 + + + + + + +
     *
+ +155 + + + + + + +
     * <p>The default is <code>null</code>.
+ +156 + + + + + + +
     */
+ +157 + + + + + + +
    public Optional<CertStore> getCertStore() {
+ +158 + + +1 + +1. getCertStore : replaced return value with Optional.empty for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getCertStore → KILLED
+ +
+
+
      return Optional.ofNullable(certStore);
+ +159 + + + + + + +
    }
+ +160 + + + + + + +
+ +161 + + + + + + +
    /**
+ +162 + + + + + + +
     * If non-null, the PolicyQualifiersRejected flag will be set to false during certificate path
+ +163 + + + + + + +
     * validation. See {@link
+ +164 + + + + + + +
     * java.security.cert.PKIXParameters#setPolicyQualifiersRejected(boolean)}.
+ +165 + + + + + + +
     *
+ +166 + + + + + + +
     * <p>The given {@link Predicate} will be used to validate the policy tree. The {@link
+ +167 + + + + + + +
     * Predicate} should return <code>true</code> if the policy tree is acceptable, and <code>false
+ +168 + + + + + + +
     * </code> otherwise.
+ +169 + + + + + + +
     *
+ +170 + + + + + + +
     * <p>Depending on your <code>"PKIX"</code> JCA provider configuration, this may be required if
+ +171 + + + + + + +
     * any certificate in the certificate path contains a certificate policies extension marked
+ +172 + + + + + + +
     * critical. If this is not set, then such a certificate will be rejected by the certificate
+ +173 + + + + + + +
     * path validator from the default provider.
+ +174 + + + + + + +
     *
+ +175 + + + + + + +
     * <p>Consult the <a
+ +176 + + + + + + +
     * href="https://docs.oracle.com/en/java/javase/17/security/java-pki-programmers-guide.html#GUID-3AD41382-E729-469B-83EE-CB2FE66D71D8">Java
+ +177 + + + + + + +
     * PKI Programmer's Guide</a> for how to use the {@link PolicyNode} argument of the {@link
+ +178 + + + + + + +
     * Predicate}.
+ +179 + + + + + + +
     *
+ +180 + + + + + + +
     * <p>The default is <code>null</code>.
+ +181 + + + + + + +
     */
+ +182 + + + + + + +
    public Optional<Predicate<PolicyNode>> getPolicyTreeValidator() {
+ +183 + + +1 + +1. getPolicyTreeValidator : replaced return value with Optional.empty for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getPolicyTreeValidator → KILLED
+ +
+
+
      return Optional.ofNullable(policyTreeValidator);
+ +184 + + + + + + +
    }
+ +185 + + + + + + +
+ +186 + + + + + + +
    public static TrustRootsResultBuilder.Step1 builder() {
+ +187 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::builder → KILLED
+ +
+
+
      return new TrustRootsResultBuilder.Step1();
+ +188 + + + + + + +
    }
+ +189 + + + + + + +
+ +190 + + + + + + +
    public static class TrustRootsResultBuilder {
+ +191 + + + + + + +
      public static class Step1 {
+ +192 + + + + + + +
        /**
+ +193 + + + + + + +
         * A set of attestation root certificates trusted to certify the relevant attestation
+ +194 + + + + + + +
         * statement. If the attestation statement is not trusted, or if no trust roots were found,
+ +195 + + + + + + +
         * this should be an empty set.
+ +196 + + + + + + +
         */
+ +197 + + +1 + +1. trustRoots : negated conditional → KILLED
+ +
+
+
        public TrustRootsResultBuilder trustRoots(@NonNull Set<X509Certificate> trustRoots) {
+ +198 + + +1 + +1. trustRoots : replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1::trustRoots → KILLED
+ +
+
+
          return new TrustRootsResultBuilder().trustRoots(trustRoots);
+ +199 + + + + + + +
        }
+ +200 + + + + + + +
      }
+ +201 + + + + + + +
+ +202 + + + + + + +
      /**
+ +203 + + + + + + +
       * A set of attestation root certificates trusted to certify the relevant attestation
+ +204 + + + + + + +
       * statement. If the attestation statement is not trusted, or if no trust roots were found,
+ +205 + + + + + + +
       * this should be an empty set.
+ +206 + + + + + + +
       */
+ +207 + + + + + + +
      // TODO: Let this auto-generate (investigate why Lombok fails to copy javadoc)
+ +208 + + + + + + +
      public AttestationTrustSource.TrustRootsResult.TrustRootsResultBuilder trustRoots(
+ +209 + + + + + + +
          @NonNull final Set<X509Certificate> trustRoots) {
+ +210 + + +1 + +1. trustRoots : negated conditional → KILLED
+ +
+
+
        if (trustRoots == null) {
+ +211 + + + + + + +
          throw new java.lang.NullPointerException("trustRoots is marked non-null but is null");
+ +212 + + + + + + +
        }
+ +213 + + + + + + +
        this.trustRoots = trustRoots;
+ +214 + + +1 + +1. trustRoots : replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::trustRoots → KILLED
+ +
+
+
        return this;
+ +215 + + + + + + +
      }
+ +216 + + + + + + +
+ +217 + + + + + + +
      /**
+ +218 + + + + + + +
       * A {@link CertStore} of additional CRLs and/or intermediate certificates to use during
+ +219 + + + + + + +
       * certificate path validation, if any. This will not be used if {@link
+ +220 + + + + + + +
       * TrustRootsResultBuilder#trustRoots(Set) trustRoots} is empty.
+ +221 + + + + + + +
       *
+ +222 + + + + + + +
       * <p>Any certificates included in this {@link CertStore} are NOT considered trusted; they
+ +223 + + + + + + +
       * will be trusted only if they chain to any of the {@link
+ +224 + + + + + + +
       * TrustRootsResultBuilder#trustRoots(Set) trustRoots}.
+ +225 + + + + + + +
       *
+ +226 + + + + + + +
       * <p>The default is <code>null</code>.
+ +227 + + + + + + +
       */
+ +228 + + + + + + +
      // TODO: Let this auto-generate (investigate why Lombok fails to copy javadoc)
+ +229 + + + + + + +
      public AttestationTrustSource.TrustRootsResult.TrustRootsResultBuilder certStore(
+ +230 + + + + + + +
          final CertStore certStore) {
+ +231 + + + + + + +
        this.certStore$value = certStore;
+ +232 + + + + + + +
        certStore$set = true;
+ +233 + + +1 + +1. certStore : replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::certStore → KILLED
+ +
+
+
        return this;
+ +234 + + + + + + +
      }
+ +235 + + + + + + +
+ +236 + + + + + + +
      /**
+ +237 + + + + + + +
       * Whether certificate revocation should be checked during certificate path validation.
+ +238 + + + + + + +
       *
+ +239 + + + + + + +
       * <p>The default is <code>true</code>.
+ +240 + + + + + + +
       */
+ +241 + + + + + + +
      // TODO: Let this auto-generate (investigate why Lombok fails to copy javadoc)
+ +242 + + + + + + +
      public AttestationTrustSource.TrustRootsResult.TrustRootsResultBuilder
+ +243 + + + + + + +
          enableRevocationChecking(final boolean enableRevocationChecking) {
+ +244 + + + + + + +
        this.enableRevocationChecking$value = enableRevocationChecking;
+ +245 + + + + + + +
        enableRevocationChecking$set = true;
+ +246 + + +1 + +1. enableRevocationChecking : replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::enableRevocationChecking → KILLED
+ +
+
+
        return this;
+ +247 + + + + + + +
      }
+ +248 + + + + + + +
+ +249 + + + + + + +
      /**
+ +250 + + + + + + +
       * If non-null, the PolicyQualifiersRejected flag will be set to false during certificate path
+ +251 + + + + + + +
       * validation. See {@link
+ +252 + + + + + + +
       * java.security.cert.PKIXParameters#setPolicyQualifiersRejected(boolean)}.
+ +253 + + + + + + +
       *
+ +254 + + + + + + +
       * <p>The given {@link Predicate} will be used to validate the policy tree. The {@link
+ +255 + + + + + + +
       * Predicate} should return <code>true</code> if the policy tree is acceptable, and <code>
+ +256 + + + + + + +
       * false
+ +257 + + + + + + +
       * </code> otherwise.
+ +258 + + + + + + +
       *
+ +259 + + + + + + +
       * <p>Depending on your <code>"PKIX"</code> JCA provider configuration, this may be required
+ +260 + + + + + + +
       * if any certificate in the certificate path contains a certificate policies extension marked
+ +261 + + + + + + +
       * critical. If this is not set, then such a certificate will be rejected by the certificate
+ +262 + + + + + + +
       * path validator from the default provider.
+ +263 + + + + + + +
       *
+ +264 + + + + + + +
       * <p>Consult the <a
+ +265 + + + + + + +
       * href="https://docs.oracle.com/en/java/javase/17/security/java-pki-programmers-guide.html#GUID-3AD41382-E729-469B-83EE-CB2FE66D71D8">Java
+ +266 + + + + + + +
       * PKI Programmer's Guide</a> for how to use the {@link PolicyNode} argument of the {@link
+ +267 + + + + + + +
       * Predicate}.
+ +268 + + + + + + +
       *
+ +269 + + + + + + +
       * <p>The default is <code>null</code>.
+ +270 + + + + + + +
       */
+ +271 + + + + + + +
      // TODO: Let this auto-generate (investigate why Lombok fails to copy javadoc)
+ +272 + + + + + + +
      public AttestationTrustSource.TrustRootsResult.TrustRootsResultBuilder policyTreeValidator(
+ +273 + + + + + + +
          final Predicate<PolicyNode> policyTreeValidator) {
+ +274 + + + + + + +
        this.policyTreeValidator$value = policyTreeValidator;
+ +275 + + + + + + +
        policyTreeValidator$set = true;
+ +276 + + +1 + +1. policyTreeValidator : replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::policyTreeValidator → KILLED
+ +
+
+
        return this;
+ +277 + + + + + + +
      }
+ +278 + + + + + + +
    }
+ +279 + + + + + + +
+ +280 + + + + + + +
    /**
+ +281 + + + + + + +
     * A set of attestation root certificates trusted to certify the relevant attestation statement.
+ +282 + + + + + + +
     * If the attestation statement is not trusted, or if no trust roots were found, this should be
+ +283 + + + + + + +
     * an empty set.
+ +284 + + + + + + +
     */
+ +285 + + + + + + +
    // TODO: Let this auto-generate (investigate why Lombok fails to copy javadoc)
+ +286 + + + + + + +
    @NonNull
+ +287 + + + + + + +
    public Set<X509Certificate> getTrustRoots() {
+ +288 + + +1 + +1. getTrustRoots : replaced return value with Collections.emptySet for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getTrustRoots → KILLED
+ +
+
+
      return this.trustRoots;
+ +289 + + + + + + +
    }
+ +290 + + + + + + +
+ +291 + + + + + + +
    /** Whether certificate revocation should be checked during certificate path validation. */
+ +292 + + + + + + +
    // TODO: Let this auto-generate (investigate why Lombok fails to copy javadoc)
+ +293 + + + + + + +
    public boolean isEnableRevocationChecking() {
+ +294 + + +2 + +1. isEnableRevocationChecking : replaced boolean return with false for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::isEnableRevocationChecking → SURVIVED
+2. isEnableRevocationChecking : replaced boolean return with true for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::isEnableRevocationChecking → KILLED
+ +
+
+
      return this.enableRevocationChecking;
+ +295 + + + + + + +
    }
+ +296 + + + + + + +
  }
+ +297 + + + + + + +
}

Mutations

136 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
158 + + + +

1.1
Location : getCertStore
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getCertStore → KILLED

+
183 + + + +

1.1
Location : getPolicyTreeValidator
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getPolicyTreeValidator → KILLED

+
187 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::builder → KILLED

+
197 + + + +

1.1
Location : trustRoots
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
198 + + + +

1.1
Location : trustRoots
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1::trustRoots → KILLED

+
210 + + + +

1.1
Location : trustRoots
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
214 + + + +

1.1
Location : trustRoots
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::trustRoots → KILLED

+
233 + + + +

1.1
Location : certStore
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::certStore → KILLED

+
246 + + + +

1.1
Location : enableRevocationChecking
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::enableRevocationChecking → KILLED

+
276 + + + +

1.1
Location : policyTreeValidator
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::policyTreeValidator → KILLED

+
288 + + + +

1.1
Location : getTrustRoots
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Collections.emptySet for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getTrustRoots → KILLED

+
294 + + + +

1.1
Location : isEnableRevocationChecking
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::isEnableRevocationChecking → KILLED

2.2
Location : isEnableRevocationChecking
Killed by : none
replaced boolean return with false for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::isEnableRevocationChecking → SURVIVED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.attestation/index.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.attestation/index.html new file mode 100644 index 000000000..a62396846 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.attestation/index.html @@ -0,0 +1,62 @@ + + + + + + + + +

Pit Test Coverage Report

+

Package Summary

+

com.yubico.webauthn.attestation

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
194%
29/31
93%
13/14
93%
13/14
+ + +

Breakdown by Class

+ + + + + + + + + + + + + + + + + + + +
NameLine CoverageMutation CoverageTest Strength
AttestationTrustSource.java
94%
29/31
93%
13/14
93%
13/14
+
+ + + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AssertionExtensionInputs.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AssertionExtensionInputs.java.html new file mode 100644 index 000000000..a1891256b --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AssertionExtensionInputs.java.html @@ -0,0 +1,4076 @@ + + + + + + + + + +

AssertionExtensionInputs.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +30 + + + + + + +
import com.yubico.webauthn.RelyingParty;
+ +31 + + + + + + +
import com.yubico.webauthn.StartAssertionOptions;
+ +32 + + + + + + +
import com.yubico.webauthn.extension.appid.AppId;
+ +33 + + + + + + +
import java.util.HashSet;
+ +34 + + + + + + +
import java.util.Optional;
+ +35 + + + + + + +
import java.util.Set;
+ +36 + + + + + + +
import lombok.Builder;
+ +37 + + + + + + +
import lombok.NonNull;
+ +38 + + + + + + +
import lombok.Value;
+ +39 + + + + + + +
+ +40 + + + + + + +
/**
+ +41 + + + + + + +
 * Contains <a
+ +42 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-extension-input">client
+ +43 + + + + + + +
 * extension inputs</a> to a <code>navigator.credentials.get()</code> operation. All members are
+ +44 + + + + + + +
 * optional.
+ +45 + + + + + + +
 *
+ +46 + + + + + + +
 * <p>The authenticator extension inputs are derived from these client extension inputs.
+ +47 + + + + + + +
 *
+ +48 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-extensions">§9. WebAuthn
+ +49 + + + + + + +
 *     Extensions</a>
+ +50 + + + + + + +
 */
+ +51 + + + + + + +
@Value
+ +52 + + + + + + +
@Builder(toBuilder = true)
+ +53 + + + + + + +
@JsonIgnoreProperties(ignoreUnknown = true)
+ +54 + + + + + + +
public class AssertionExtensionInputs implements ExtensionInputs {
+ +55 + + + + + + +
+ +56 + + + + + + +
  private final AppId appid;
+ +57 + + + + + + +
  private final Extensions.LargeBlob.LargeBlobAuthenticationInput largeBlob;
+ +58 + + + + + + +
  private final Boolean uvm;
+ +59 + + + + + + +
+ +60 + + + + + + +
  @JsonCreator
+ +61 + + + + + + +
  private AssertionExtensionInputs(
+ +62 + + + + + + +
      @JsonProperty("appid") AppId appid,
+ +63 + + + + + + +
      @JsonProperty("largeBlob") Extensions.LargeBlob.LargeBlobAuthenticationInput largeBlob,
+ +64 + + + + + + +
      @JsonProperty("uvm") Boolean uvm) {
+ +65 + + + + + + +
    this.appid = appid;
+ +66 + + + + + + +
    this.largeBlob = largeBlob;
+ +67 + + +2 + +1. <init> : negated conditional → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    this.uvm = (uvm != null && uvm) ? true : null;
+ +68 + + + + + + +
  }
+ +69 + + + + + + +
+ +70 + + + + + + +
  /**
+ +71 + + + + + + +
   * Merge <code>other</code> into <code>this</code>. Non-null field values from <code>this</code>
+ +72 + + + + + + +
   * take precedence.
+ +73 + + + + + + +
   *
+ +74 + + + + + + +
   * @return a new {@link AssertionExtensionInputs} instance with the settings from both <code>this
+ +75 + + + + + + +
   *     </code> and <code>other</code>.
+ +76 + + + + + + +
   */
+ +77 + + + + + + +
  public AssertionExtensionInputs merge(AssertionExtensionInputs other) {
+ +78 + + +1 + +1. merge : replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs::merge → KILLED
+ +
+
+
    return new AssertionExtensionInputs(
+ +79 + + +1 + +1. merge : negated conditional → KILLED
+ +
+
+
        this.appid != null ? this.appid : other.appid,
+ +80 + + +1 + +1. merge : negated conditional → SURVIVED
+ +
+
+
        this.largeBlob != null ? this.largeBlob : other.largeBlob,
+ +81 + + +1 + +1. merge : negated conditional → SURVIVED
+ +
+
+
        this.uvm != null ? this.uvm : other.uvm);
+ +82 + + + + + + +
  }
+ +83 + + + + + + +
+ +84 + + + + + + +
  /**
+ +85 + + + + + + +
   * @return The extension identifiers of all extensions configured.
+ +86 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-extension-id">§9.1.
+ +87 + + + + + + +
   *     Extension Identifiers</a>
+ +88 + + + + + + +
   */
+ +89 + + + + + + +
  @Override
+ +90 + + + + + + +
  public Set<String> getExtensionIds() {
+ +91 + + + + + + +
    Set<String> ids = new HashSet<>();
+ +92 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (appid != null) {
+ +93 + + + + + + +
      ids.add(Extensions.Appid.EXTENSION_ID);
+ +94 + + + + + + +
    }
+ +95 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (largeBlob != null) {
+ +96 + + + + + + +
      ids.add(Extensions.LargeBlob.EXTENSION_ID);
+ +97 + + + + + + +
    }
+ +98 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (getUvm()) {
+ +99 + + + + + + +
      ids.add(Extensions.Uvm.EXTENSION_ID);
+ +100 + + + + + + +
    }
+ +101 + + +1 + +1. getExtensionIds : replaced return value with Collections.emptySet for com/yubico/webauthn/data/AssertionExtensionInputs::getExtensionIds → KILLED
+ +
+
+
    return ids;
+ +102 + + + + + + +
  }
+ +103 + + + + + + +
+ +104 + + + + + + +
  public static class AssertionExtensionInputsBuilder {
+ +105 + + + + + + +
    /**
+ +106 + + + + + + +
     * The input to the FIDO AppID Extension (<code>appid</code>).
+ +107 + + + + + + +
     *
+ +108 + + + + + + +
     * <p>You usually do not need to call this method explicitly; if {@link RelyingParty#getAppId()}
+ +109 + + + + + + +
     * is present, then {@link RelyingParty#startAssertion(StartAssertionOptions)} will enable this
+ +110 + + + + + + +
     * extension automatically.
+ +111 + + + + + + +
     *
+ +112 + + + + + + +
     * <p>This extension allows WebAuthn Relying Parties that have previously registered a
+ +113 + + + + + + +
     * credential using the legacy FIDO JavaScript APIs to request an assertion. The FIDO APIs use
+ +114 + + + + + + +
     * an alternative identifier for Relying Parties called an <a
+ +115 + + + + + + +
     * href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-appid-and-facets-v2.0-id-20180227.html">AppID</a>,
+ +116 + + + + + + +
     * and any credentials created using those APIs will be scoped to that identifier. Without this
+ +117 + + + + + + +
     * extension, they would need to be re-registered in order to be scoped to an RP ID.
+ +118 + + + + + + +
     *
+ +119 + + + + + + +
     * <p>This extension does not allow FIDO-compatible credentials to be created. Thus, credentials
+ +120 + + + + + + +
     * created with WebAuthn are not backwards compatible with the FIDO JavaScript APIs.
+ +121 + + + + + + +
     *
+ +122 + + + + + + +
     * @see <a
+ +123 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +124 + + + + + + +
     *     FIDO AppID Extension (appid)</a>
+ +125 + + + + + + +
     */
+ +126 + + +1 + +1. appid : negated conditional → KILLED
+ +
+
+
    public AssertionExtensionInputsBuilder appid(@NonNull Optional<AppId> appid) {
+ +127 + + +1 + +1. appid : replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::appid → KILLED
+ +
+
+
      return this.appid(appid.orElse(null));
+ +128 + + + + + + +
    }
+ +129 + + + + + + +
+ +130 + + + + + + +
    /**
+ +131 + + + + + + +
     * The input to the FIDO AppID Extension (<code>appid</code>).
+ +132 + + + + + + +
     *
+ +133 + + + + + + +
     * <p>You usually do not need to call this method explicitly; if {@link RelyingParty#getAppId()}
+ +134 + + + + + + +
     * is present, then {@link RelyingParty#startAssertion(StartAssertionOptions)} will enable this
+ +135 + + + + + + +
     * extension automatically.
+ +136 + + + + + + +
     *
+ +137 + + + + + + +
     * <p>This extension allows WebAuthn Relying Parties that have previously registered a
+ +138 + + + + + + +
     * credential using the legacy FIDO JavaScript APIs to request an assertion. The FIDO APIs use
+ +139 + + + + + + +
     * an alternative identifier for Relying Parties called an <a
+ +140 + + + + + + +
     * href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-appid-and-facets-v2.0-id-20180227.html">AppID</a>,
+ +141 + + + + + + +
     * and any credentials created using those APIs will be scoped to that identifier. Without this
+ +142 + + + + + + +
     * extension, they would need to be re-registered in order to be scoped to an RP ID.
+ +143 + + + + + + +
     *
+ +144 + + + + + + +
     * <p>This extension does not allow FIDO-compatible credentials to be created. Thus, credentials
+ +145 + + + + + + +
     * created with WebAuthn are not backwards compatible with the FIDO JavaScript APIs.
+ +146 + + + + + + +
     *
+ +147 + + + + + + +
     * @see <a
+ +148 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +149 + + + + + + +
     *     FIDO AppID Extension (appid)</a>
+ +150 + + + + + + +
     */
+ +151 + + + + + + +
    public AssertionExtensionInputsBuilder appid(AppId appid) {
+ +152 + + + + + + +
      this.appid = appid;
+ +153 + + +1 + +1. appid : replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::appid → KILLED
+ +
+
+
      return this;
+ +154 + + + + + + +
    }
+ +155 + + + + + + +
+ +156 + + + + + + +
    /**
+ +157 + + + + + + +
     * Enable the Large blob storage extension (<code>largeBlob</code>).
+ +158 + + + + + + +
     *
+ +159 + + + + + + +
     * <p>Suitable arguments can be obtained using {@link
+ +160 + + + + + + +
     * Extensions.LargeBlob.LargeBlobAuthenticationInput#read()} or {@link
+ +161 + + + + + + +
     * Extensions.LargeBlob.LargeBlobAuthenticationInput#write(ByteArray)}.
+ +162 + + + + + + +
     *
+ +163 + + + + + + +
     * @see Extensions.LargeBlob.LargeBlobAuthenticationInput#read()
+ +164 + + + + + + +
     * @see Extensions.LargeBlob.LargeBlobAuthenticationInput#write(ByteArray)
+ +165 + + + + + + +
     * @see <a
+ +166 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +167 + + + + + + +
     *     Large blob storage extension (largeBlob)</a>
+ +168 + + + + + + +
     */
+ +169 + + + + + + +
    public AssertionExtensionInputsBuilder largeBlob(
+ +170 + + + + + + +
        Extensions.LargeBlob.LargeBlobAuthenticationInput largeBlob) {
+ +171 + + + + + + +
      this.largeBlob = largeBlob;
+ +172 + + +1 + +1. largeBlob : replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::largeBlob → KILLED
+ +
+
+
      return this;
+ +173 + + + + + + +
    }
+ +174 + + + + + + +
+ +175 + + + + + + +
    /**
+ +176 + + + + + + +
     * Enable the User Verification Method Extension (<code>uvm</code>).
+ +177 + + + + + + +
     *
+ +178 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">§10.3.
+ +179 + + + + + + +
     *     User Verification Method Extension (uvm)</a>
+ +180 + + + + + + +
     */
+ +181 + + + + + + +
    public AssertionExtensionInputsBuilder uvm() {
+ +182 + + + + + + +
      this.uvm = true;
+ +183 + + +1 + +1. uvm : replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::uvm → KILLED
+ +
+
+
      return this;
+ +184 + + + + + + +
    }
+ +185 + + + + + + +
+ +186 + + + + + + +
    /** For compatibility with {@link Builder}(toBuilder = true) */
+ +187 + + + + + + +
    private AssertionExtensionInputsBuilder uvm(Boolean uvm) {
+ +188 + + + + + + +
      this.uvm = uvm;
+ +189 + + +1 + +1. uvm : replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::uvm → KILLED
+ +
+
+
      return this;
+ +190 + + + + + + +
    }
+ +191 + + + + + + +
  }
+ +192 + + + + + + +
+ +193 + + + + + + +
  /**
+ +194 + + + + + + +
   * The input to the FIDO AppID Extension (<code>appid</code>).
+ +195 + + + + + + +
   *
+ +196 + + + + + + +
   * <p>This extension allows WebAuthn Relying Parties that have previously registered a credential
+ +197 + + + + + + +
   * using the legacy FIDO JavaScript APIs to request an assertion. The FIDO APIs use an alternative
+ +198 + + + + + + +
   * identifier for Relying Parties called an <a
+ +199 + + + + + + +
   * href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-appid-and-facets-v2.0-id-20180227.html">AppID</a>,
+ +200 + + + + + + +
   * and any credentials created using those APIs will be scoped to that identifier. Without this
+ +201 + + + + + + +
   * extension, they would need to be re-registered in order to be scoped to an RP ID.
+ +202 + + + + + + +
   *
+ +203 + + + + + + +
   * <p>This extension does not allow FIDO-compatible credentials to be created. Thus, credentials
+ +204 + + + + + + +
   * created with WebAuthn are not backwards compatible with the FIDO JavaScript APIs.
+ +205 + + + + + + +
   *
+ +206 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +207 + + + + + + +
   *     FIDO AppID Extension (appid)</a>
+ +208 + + + + + + +
   */
+ +209 + + + + + + +
  public Optional<AppId> getAppid() {
+ +210 + + +1 + +1. getAppid : replaced return value with Optional.empty for com/yubico/webauthn/data/AssertionExtensionInputs::getAppid → KILLED
+ +
+
+
    return Optional.ofNullable(appid);
+ +211 + + + + + + +
  }
+ +212 + + + + + + +
+ +213 + + + + + + +
  /**
+ +214 + + + + + + +
   * The input to the Large blob storage extension (<code>largeBlob</code>).
+ +215 + + + + + + +
   *
+ +216 + + + + + + +
   * <p>This extension allows a Relying Party to store opaque data associated with a credential.
+ +217 + + + + + + +
   *
+ +218 + + + + + + +
   * @see Extensions.LargeBlob.LargeBlobAuthenticationInput#read()
+ +219 + + + + + + +
   * @see Extensions.LargeBlob.LargeBlobAuthenticationInput#write(ByteArray)
+ +220 + + + + + + +
   * @see <a
+ +221 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +222 + + + + + + +
   *     Large blob storage extension (largeBlob)</a>
+ +223 + + + + + + +
   */
+ +224 + + + + + + +
  public Optional<Extensions.LargeBlob.LargeBlobAuthenticationInput> getLargeBlob() {
+ +225 + + +1 + +1. getLargeBlob : replaced return value with Optional.empty for com/yubico/webauthn/data/AssertionExtensionInputs::getLargeBlob → KILLED
+ +
+
+
    return Optional.ofNullable(largeBlob);
+ +226 + + + + + + +
  }
+ +227 + + + + + + +
+ +228 + + + + + + +
  /** For JSON serialization, to omit false and null values. */
+ +229 + + + + + + +
  @JsonProperty("largeBlob")
+ +230 + + + + + + +
  private Extensions.LargeBlob.LargeBlobAuthenticationInput getLargeBlobJson() {
+ +231 + + +3 + +1. getLargeBlobJson : negated conditional → KILLED
+2. getLargeBlobJson : negated conditional → KILLED
+3. getLargeBlobJson : negated conditional → KILLED
+ +
+
+
    return largeBlob != null && (largeBlob.getRead() || largeBlob.getWrite().isPresent())
+ +232 + + + + + + +
        ? largeBlob
+ +233 + + + + + + +
        : null;
+ +234 + + + + + + +
  }
+ +235 + + + + + + +
+ +236 + + + + + + +
  /**
+ +237 + + + + + + +
   * @return <code>true</code> if the User Verification Method Extension (<code>uvm</code>) is
+ +238 + + + + + + +
   *     enabled, <code>false</code> otherwise.
+ +239 + + + + + + +
   * @see AssertionExtensionInputsBuilder#uvm()
+ +240 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">§10.3.
+ +241 + + + + + + +
   *     User Verification Method Extension (uvm)</a>
+ +242 + + + + + + +
   */
+ +243 + + + + + + +
  public boolean getUvm() {
+ +244 + + +3 + +1. getUvm : replaced boolean return with true for com/yubico/webauthn/data/AssertionExtensionInputs::getUvm → KILLED
+2. getUvm : negated conditional → KILLED
+3. getUvm : negated conditional → KILLED
+ +
+
+
    return uvm != null && uvm;
+ +245 + + + + + + +
  }
+ +246 + + + + + + +
+ +247 + + + + + + +
  /** For JSON serialization, to omit false values. */
+ +248 + + + + + + +
  @JsonProperty("uvm")
+ +249 + + + + + + +
  private Boolean getUvmJson() {
+ +250 + + +3 + +1. getUvmJson : replaced Boolean return with True for com/yubico/webauthn/data/AssertionExtensionInputs::getUvmJson → KILLED
+2. getUvmJson : replaced Boolean return with False for com/yubico/webauthn/data/AssertionExtensionInputs::getUvmJson → KILLED
+3. getUvmJson : negated conditional → KILLED
+ +
+
+
    return getUvm() ? true : null;
+ +251 + + + + + + +
  }
+ +252 + + + + + + +
}

Mutations

67 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest)
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
78 + + + +

1.1
Location : merge
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs::merge → KILLED

+
79 + + + +

1.1
Location : merge
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
80 + + + +

1.1
Location : merge
Killed by : none
negated conditional → SURVIVED

+
81 + + + +

1.1
Location : merge
Killed by : none
negated conditional → SURVIVED

+
92 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
95 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
98 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
101 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Collections.emptySet for com/yubico/webauthn/data/AssertionExtensionInputs::getExtensionIds → KILLED

+
126 + + + +

1.1
Location : appid
Killed by : com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest)
negated conditional → KILLED

+
127 + + + +

1.1
Location : appid
Killed by : com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest)
replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::appid → KILLED

+
153 + + + +

1.1
Location : appid
Killed by : com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest)
replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::appid → KILLED

+
172 + + + +

1.1
Location : largeBlob
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::largeBlob → KILLED

+
183 + + + +

1.1
Location : uvm
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::uvm → KILLED

+
189 + + + +

1.1
Location : uvm
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::uvm → KILLED

+
210 + + + +

1.1
Location : getAppid
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AssertionExtensionInputs::getAppid → KILLED

+
225 + + + +

1.1
Location : getLargeBlob
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AssertionExtensionInputs::getLargeBlob → KILLED

+
231 + + + +

1.1
Location : getLargeBlobJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

2.2
Location : getLargeBlobJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

3.3
Location : getLargeBlobJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
244 + + + +

1.1
Location : getUvm
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced boolean return with true for com/yubico/webauthn/data/AssertionExtensionInputs::getUvm → KILLED

2.2
Location : getUvm
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
negated conditional → KILLED

3.3
Location : getUvm
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
250 + + + +

1.1
Location : getUvmJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced Boolean return with True for com/yubico/webauthn/data/AssertionExtensionInputs::getUvmJson → KILLED

2.2
Location : getUvmJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced Boolean return with False for com/yubico/webauthn/data/AssertionExtensionInputs::getUvmJson → KILLED

3.3
Location : getUvmJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestationConveyancePreference.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestationConveyancePreference.java.html new file mode 100644 index 000000000..3dfd91a45 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestationConveyancePreference.java.html @@ -0,0 +1,1716 @@ + + + + + + + + + +

AttestationConveyancePreference.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +29 + + + + + + +
import java.util.Optional;
+ +30 + + + + + + +
import java.util.stream.Stream;
+ +31 + + + + + + +
import lombok.AccessLevel;
+ +32 + + + + + + +
import lombok.AllArgsConstructor;
+ +33 + + + + + + +
import lombok.Getter;
+ +34 + + + + + + +
import lombok.NonNull;
+ +35 + + + + + + +
+ +36 + + + + + + +
/**
+ +37 + + + + + + +
 * Relying Parties may use this to specify their preference regarding attestation conveyance during
+ +38 + + + + + + +
 * credential generation.
+ +39 + + + + + + +
 *
+ +40 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#attestation-conveyance">§5.4.6.
+ +41 + + + + + + +
 *     Attestation Conveyance Preference Enumeration (enum AttestationConveyancePreference) </a>
+ +42 + + + + + + +
 */
+ +43 + + + + + + +
@AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +44 + + + + + + +
public enum AttestationConveyancePreference {
+ +45 + + + + + + +
+ +46 + + + + + + +
  /**
+ +47 + + + + + + +
   * Indicates that the Relying Party is not interested in authenticator attestation.
+ +48 + + + + + + +
   *
+ +49 + + + + + + +
   * <p>For example, in order to potentially avoid having to obtain user consent to relay
+ +50 + + + + + + +
   * identifying information to the Relying Party, or to save a roundtrip to an <a
+ +51 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#attestation-ca">Attestation CA</a>.
+ +52 + + + + + + +
   *
+ +53 + + + + + + +
   * <p>This is the default value.
+ +54 + + + + + + +
   */
+ +55 + + + + + + +
  NONE("none"),
+ +56 + + + + + + +
+ +57 + + + + + + +
  /**
+ +58 + + + + + + +
   * Indicates that the Relying Party prefers an attestation conveyance yielding verifiable
+ +59 + + + + + + +
   * attestation statements, but allows the client to decide how to obtain such attestation
+ +60 + + + + + + +
   * statements. The client MAY replace the authenticator-generated attestation statements with
+ +61 + + + + + + +
   * attestation statements generated by an <a
+ +62 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#anonymization-ca">Anonymization
+ +63 + + + + + + +
   * CA</a>, in order to protect the user’s privacy, or to assist Relying Parties with attestation
+ +64 + + + + + + +
   * verification in a heterogeneous ecosystem.
+ +65 + + + + + + +
   *
+ +66 + + + + + + +
   * <p>Note: There is no guarantee that the Relying Party will obtain a verifiable attestation
+ +67 + + + + + + +
   * statement in this case. For example, in the case that the authenticator employs self
+ +68 + + + + + + +
   * attestation.
+ +69 + + + + + + +
   */
+ +70 + + + + + + +
  INDIRECT("indirect"),
+ +71 + + + + + + +
+ +72 + + + + + + +
  /**
+ +73 + + + + + + +
   * Indicates that the Relying Party wants to receive the attestation statement as generated by the
+ +74 + + + + + + +
   * authenticator.
+ +75 + + + + + + +
   */
+ +76 + + + + + + +
  DIRECT("direct"),
+ +77 + + + + + + +
+ +78 + + + + + + +
  /**
+ +79 + + + + + + +
   * This value indicates that the Relying Party wants to receive an attestation statement that may
+ +80 + + + + + + +
   * include uniquely identifying information. This is intended for controlled deployments within an
+ +81 + + + + + + +
   * enterprise where the organization wishes to tie registrations to specific authenticators. User
+ +82 + + + + + + +
   * agents MUST NOT provide such an attestation unless the user agent or authenticator
+ +83 + + + + + + +
   * configuration permits it for the requested RP ID.
+ +84 + + + + + + +
   *
+ +85 + + + + + + +
   * <p>If permitted, the user agent SHOULD signal to the authenticator (at invocation time) that
+ +86 + + + + + + +
   * enterprise attestation is requested, and convey the resulting AAGUID and attestation statement,
+ +87 + + + + + + +
   * unaltered, to the Relying Party.
+ +88 + + + + + + +
   */
+ +89 + + + + + + +
  ENTERPRISE("enterprise");
+ +90 + + + + + + +
+ +91 + + + + + + +
  @JsonValue @Getter @NonNull private final String value;
+ +92 + + + + + + +
+ +93 + + +1 + +1. fromString : negated conditional → KILLED
+ +
+
+
  private static Optional<AttestationConveyancePreference> fromString(@NonNull String value) {
+ +94 + + +3 + +1. lambda$fromString$0 : replaced boolean return with false for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromString$0 → KILLED
+2. lambda$fromString$0 : replaced boolean return with true for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromString$0 → KILLED
+3. fromString : replaced return value with Optional.empty for com/yubico/webauthn/data/AttestationConveyancePreference::fromString → KILLED
+ +
+
+
    return Stream.of(values()).filter(v -> v.value.equals(value)).findAny();
+ +95 + + + + + + +
  }
+ +96 + + + + + + +
+ +97 + + + + + + +
  @JsonCreator
+ +98 + + +1 + +1. fromJsonString : negated conditional → KILLED
+ +
+
+
  private static AttestationConveyancePreference fromJsonString(@NonNull String value) {
+ +99 + + +1 + +1. fromJsonString : replaced return value with null for com/yubico/webauthn/data/AttestationConveyancePreference::fromJsonString → KILLED
+ +
+
+
    return fromString(value)
+ +100 + + + + + + +
        .orElseThrow(
+ +101 + + + + + + +
            () ->
+ +102 + + +1 + +1. lambda$fromJsonString$1 : replaced return value with null for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromJsonString$1 → KILLED
+ +
+
+
                new IllegalArgumentException(
+ +103 + + + + + + +
                    String.format(
+ +104 + + + + + + +
                        "Unknown %s value: %s",
+ +105 + + + + + + +
                        AttestationConveyancePreference.class.getSimpleName(), value)));
+ +106 + + + + + + +
  }
+ +107 + + + + + + +
}

Mutations

93 + + + +

1.1
Location : fromString
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

+
94 + + + +

1.1
Location : lambda$fromString$0
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced boolean return with false for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromString$0 → KILLED

2.2
Location : lambda$fromString$0
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced boolean return with true for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromString$0 → KILLED

3.3
Location : fromString
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AttestationConveyancePreference::fromString → KILLED

+
98 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

+
99 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/data/AttestationConveyancePreference::fromJsonString → KILLED

+
102 + + + +

1.1
Location : lambda$fromJsonString$1
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromJsonString$1 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestationObject.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestationObject.java.html new file mode 100644 index 000000000..df42d4128 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestationObject.java.html @@ -0,0 +1,2707 @@ + + + + + + + + + +

AttestationObject.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.core.JsonGenerator;
+ +29 + + + + + + +
import com.fasterxml.jackson.databind.JsonNode;
+ +30 + + + + + + +
import com.fasterxml.jackson.databind.SerializerProvider;
+ +31 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+ +32 + + + + + + +
import com.fasterxml.jackson.databind.node.ObjectNode;
+ +33 + + + + + + +
import com.yubico.internal.util.JacksonCodecs;
+ +34 + + + + + + +
import java.io.IOException;
+ +35 + + + + + + +
import lombok.NonNull;
+ +36 + + + + + + +
import lombok.Value;
+ +37 + + + + + + +
+ +38 + + + + + + +
/**
+ +39 + + + + + + +
 * Authenticators MUST provide some form of attestation. The basic requirement is that the
+ +40 + + + + + + +
 * authenticator can produce, for each credential public key, an attestation statement verifiable by
+ +41 + + + + + + +
 * the WebAuthn Relying Party. Typically, this attestation statement contains a signature by an
+ +42 + + + + + + +
 * attestation private key over the attested credential public key and a challenge, as well as a
+ +43 + + + + + + +
 * certificate or similar data providing provenance information for the attestation public key,
+ +44 + + + + + + +
 * enabling the Relying Party to make a trust decision. However, if an attestation key pair is not
+ +45 + + + + + + +
 * available, then the authenticator MUST perform <a
+ +46 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#self-attestation">self attestation</a>
+ +47 + + + + + + +
 * of the credential public key with the corresponding credential private key. All this information
+ +48 + + + + + + +
 * is returned by authenticators any time a new public key credential is generated, in the overall
+ +49 + + + + + + +
 * form of an attestation object. The relationship of the attestation object with authenticator data
+ +50 + + + + + + +
 * (containing attested credential data) and the attestation statement is illustrated in <a
+ +51 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#fig-attStructs">figure 5</a>.
+ +52 + + + + + + +
 *
+ +53 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +54 + + + + + + +
 *     Attestation</a>
+ +55 + + + + + + +
 */
+ +56 + + + + + + +
@Value
+ +57 + + + + + + +
@JsonSerialize(using = AttestationObject.JsonSerializer.class)
+ +58 + + + + + + +
public class AttestationObject {
+ +59 + + + + + + +
+ +60 + + + + + + +
  /**
+ +61 + + + + + + +
   * The original raw byte array that this object is decoded from.
+ +62 + + + + + + +
   *
+ +63 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +64 + + + + + + +
   *     Attestation</a>
+ +65 + + + + + + +
   */
+ +66 + + + + + + +
  @NonNull private final ByteArray bytes;
+ +67 + + + + + + +
+ +68 + + + + + + +
  /**
+ +69 + + + + + + +
   * The authenticator data embedded inside this attestation object. This is one part of the signed
+ +70 + + + + + + +
   * data that the signature in the attestation statement (if any) is computed over.
+ +71 + + + + + + +
   */
+ +72 + + + + + + +
  @NonNull private final transient AuthenticatorData authenticatorData;
+ +73 + + + + + + +
+ +74 + + + + + + +
  /**
+ +75 + + + + + + +
   * The attestation statement format identifier of this attestation object.
+ +76 + + + + + + +
   *
+ +77 + + + + + + +
   * @see <a
+ +78 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-defined-attestation-formats">§8.
+ +79 + + + + + + +
   *     Defined Attestation Statement Formats</a>
+ +80 + + + + + + +
   *     <p>Users of this library should not need to access this value directly.
+ +81 + + + + + + +
   */
+ +82 + + + + + + +
  @NonNull private final transient String format;
+ +83 + + + + + + +
+ +84 + + + + + + +
  /**
+ +85 + + + + + + +
   * An important component of the attestation object is the attestation statement. This is a
+ +86 + + + + + + +
   * specific type of signed data object, containing statements about a public key credential itself
+ +87 + + + + + + +
   * and the authenticator that created it. It contains an attestation signature created using the
+ +88 + + + + + + +
   * key of the attesting authority (except for the case of self attestation, when it is created
+ +89 + + + + + + +
   * using the credential private key).
+ +90 + + + + + + +
   *
+ +91 + + + + + + +
   * <p>Users of this library should not need to access this value directly.
+ +92 + + + + + + +
   */
+ +93 + + + + + + +
  @NonNull private final transient ObjectNode attestationStatement;
+ +94 + + + + + + +
+ +95 + + + + + + +
  /**
+ +96 + + + + + + +
   * Decode an {@link AttestationObject} object from a raw attestation object byte array.
+ +97 + + + + + + +
   *
+ +98 + + + + + + +
   * @throws IOException if <code>bytes</code> cannot be parsed as a CBOR map.
+ +99 + + + + + + +
   */
+ +100 + + + + + + +
  @JsonCreator
+ +101 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
  public AttestationObject(@NonNull ByteArray bytes) throws IOException {
+ +102 + + + + + + +
    this.bytes = bytes;
+ +103 + + + + + + +
+ +104 + + + + + + +
    final JsonNode decoded = JacksonCodecs.cbor().readTree(bytes.getBytes());
+ +105 + + + + + + +
    final ByteArray authDataBytes;
+ +106 + + + + + + +
+ +107 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    if (!decoded.isObject()) {
+ +108 + + + + + + +
      throw new IllegalArgumentException(
+ +109 + + + + + + +
          String.format("Attestation object must be a CBOR map, was: %s", decoded.getNodeType()));
+ +110 + + + + + + +
    }
+ +111 + + + + + + +
+ +112 + + + + + + +
    final JsonNode authData = decoded.get("authData");
+ +113 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    if (authData == null) {
+ +114 + + + + + + +
      throw new IllegalArgumentException(
+ +115 + + + + + + +
          "Required property \"authData\" missing from attestation object: "
+ +116 + + + + + + +
              + bytes.getBase64Url());
+ +117 + + + + + + +
    } else {
+ +118 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      if (authData.isBinary()) {
+ +119 + + + + + + +
        authDataBytes = new ByteArray(authData.binaryValue());
+ +120 + + + + + + +
      } else {
+ +121 + + + + + + +
        throw new IllegalArgumentException(
+ +122 + + + + + + +
            String.format(
+ +123 + + + + + + +
                "Property \"authData\" of attestation object must be a CBOR byte array, was: %s. Attestation object: %s",
+ +124 + + + + + + +
                authData.getNodeType(), bytes.getBase64Url()));
+ +125 + + + + + + +
      }
+ +126 + + + + + + +
    }
+ +127 + + + + + + +
+ +128 + + + + + + +
    final JsonNode format = decoded.get("fmt");
+ +129 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    if (format == null) {
+ +130 + + + + + + +
      throw new IllegalArgumentException(
+ +131 + + + + + + +
          "Required property \"fmt\" missing from attestation object: " + bytes.getBase64Url());
+ +132 + + + + + + +
    } else {
+ +133 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      if (format.isTextual()) {
+ +134 + + + + + + +
        this.format = decoded.get("fmt").textValue();
+ +135 + + + + + + +
      } else {
+ +136 + + + + + + +
        throw new IllegalArgumentException(
+ +137 + + + + + + +
            String.format(
+ +138 + + + + + + +
                "Property \"fmt\" of attestation object must be a CBOR text value, was: %s. Attestation object: %s",
+ +139 + + + + + + +
                format.getNodeType(), bytes.getBase64Url()));
+ +140 + + + + + + +
      }
+ +141 + + + + + + +
    }
+ +142 + + + + + + +
+ +143 + + + + + + +
    final JsonNode attStmt = decoded.get("attStmt");
+ +144 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    if (attStmt == null) {
+ +145 + + + + + + +
      throw new IllegalArgumentException(
+ +146 + + + + + + +
          "Required property \"attStmt\" missing from attestation object: " + bytes.getBase64Url());
+ +147 + + + + + + +
    } else {
+ +148 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      if (attStmt.isObject()) {
+ +149 + + + + + + +
        this.attestationStatement = (ObjectNode) attStmt;
+ +150 + + + + + + +
      } else {
+ +151 + + + + + + +
        throw new IllegalArgumentException(
+ +152 + + + + + + +
            String.format(
+ +153 + + + + + + +
                "Property \"attStmt\" of attestation object must be a CBOR map, was: %s. Attestation object: %s",
+ +154 + + + + + + +
                attStmt.getNodeType(), bytes.getBase64Url()));
+ +155 + + + + + + +
      }
+ +156 + + + + + + +
    }
+ +157 + + + + + + +
+ +158 + + + + + + +
    authenticatorData = new AuthenticatorData(authDataBytes);
+ +159 + + + + + + +
  }
+ +160 + + + + + + +
+ +161 + + + + + + +
  static class JsonSerializer
+ +162 + + + + + + +
      extends com.fasterxml.jackson.databind.JsonSerializer<AttestationObject> {
+ +163 + + + + + + +
    @Override
+ +164 + + + + + + +
    public void serialize(
+ +165 + + + + + + +
        AttestationObject value, JsonGenerator gen, SerializerProvider serializers)
+ +166 + + + + + + +
        throws IOException {
+ +167 + + +1 + +1. serialize : removed call to com/fasterxml/jackson/core/JsonGenerator::writeString → KILLED
+ +
+
+
      gen.writeString(value.getBytes().getBase64Url());
+ +168 + + + + + + +
    }
+ +169 + + + + + + +
  }
+ +170 + + + + + + +
}

Mutations

101 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
107 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
113 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
118 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
129 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
133 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
144 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
148 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
167 + + + +

1.1
Location : serialize
Killed by : com.yubico.webauthn.data.JsonIoSpec
removed call to com/fasterxml/jackson/core/JsonGenerator::writeString → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestedCredentialData.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestedCredentialData.java.html new file mode 100644 index 000000000..120c75d34 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AttestedCredentialData.java.html @@ -0,0 +1,1192 @@ + + + + + + + + + +

AttestedCredentialData.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import lombok.Builder;
+ +30 + + + + + + +
import lombok.NonNull;
+ +31 + + + + + + +
import lombok.Value;
+ +32 + + + + + + +
+ +33 + + + + + + +
/**
+ +34 + + + + + + +
 * Attested credential data is a variable-length byte array added to the authenticator data when
+ +35 + + + + + + +
 * generating an attestation object for a given credential. This class provides access to the three
+ +36 + + + + + + +
 * data segments of that byte array.
+ +37 + + + + + + +
 *
+ +38 + + + + + + +
 * @see <a
+ +39 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attested-credential-data">6.4.1.
+ +40 + + + + + + +
 *     Attested Credential Data</a>
+ +41 + + + + + + +
 */
+ +42 + + + + + + +
@Value
+ +43 + + + + + + +
@Builder(toBuilder = true)
+ +44 + + + + + + +
public class AttestedCredentialData {
+ +45 + + + + + + +
+ +46 + + + + + + +
  /** The AAGUID of the authenticator. */
+ +47 + + + + + + +
  @NonNull private final ByteArray aaguid;
+ +48 + + + + + + +
+ +49 + + + + + + +
  /** The credential ID of the attested credential. */
+ +50 + + + + + + +
  @NonNull private final ByteArray credentialId;
+ +51 + + + + + + +
+ +52 + + + + + + +
  /**
+ +53 + + + + + + +
   * The credential public key encoded in COSE_Key format, as defined in Section 7 of <a
+ +54 + + + + + + +
   * href="https://tools.ietf.org/html/rfc8152">RFC 8152</a>.
+ +55 + + + + + + +
   */
+ +56 + + + + + + +
  @NonNull private final ByteArray credentialPublicKey;
+ +57 + + + + + + +
+ +58 + + + + + + +
  @JsonCreator
+ +59 + + + + + + +
  private AttestedCredentialData(
+ +60 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("aaguid") ByteArray aaguid,
+ +61 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("credentialId") ByteArray credentialId,
+ +62 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("credentialPublicKey") ByteArray credentialPublicKey) {
+ +63 + + + + + + +
    this.aaguid = aaguid;
+ +64 + + + + + + +
    this.credentialId = credentialId;
+ +65 + + + + + + +
    this.credentialPublicKey = credentialPublicKey;
+ +66 + + + + + + +
  }
+ +67 + + + + + + +
+ +68 + + + + + + +
  static AttestedCredentialDataBuilder builder() {
+ +69 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/AttestedCredentialData::builder → KILLED
+ +
+
+
    return new AttestedCredentialDataBuilder();
+ +70 + + + + + + +
  }
+ +71 + + + + + + +
+ +72 + + + + + + +
  static class AttestedCredentialDataBuilder {}
+ +73 + + + + + + +
}

Mutations

60 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
61 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
62 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
69 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
replaced return value with null for com/yubico/webauthn/data/AttestedCredentialData::builder → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAssertionExtensionOutputs.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAssertionExtensionOutputs.java.html new file mode 100644 index 000000000..c0545f842 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAssertionExtensionOutputs.java.html @@ -0,0 +1,2290 @@ + + + + + + + + + +

AuthenticatorAssertionExtensionOutputs.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +30 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +31 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +32 + + + + + + +
import java.util.HashSet;
+ +33 + + + + + + +
import java.util.List;
+ +34 + + + + + + +
import java.util.Optional;
+ +35 + + + + + + +
import java.util.Set;
+ +36 + + + + + + +
import lombok.Builder;
+ +37 + + + + + + +
import lombok.EqualsAndHashCode;
+ +38 + + + + + + +
import lombok.Value;
+ +39 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +40 + + + + + + +
+ +41 + + + + + + +
/**
+ +42 + + + + + + +
 * Contains <a
+ +43 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">authenticator
+ +44 + + + + + + +
 * extension outputs</a> from a <code>navigator.credentials.create()</code> operation.
+ +45 + + + + + + +
 *
+ +46 + + + + + + +
 * <p>Note that there is no guarantee that any extension input present in {@link
+ +47 + + + + + + +
 * RegistrationExtensionInputs} will have a corresponding output present here.
+ +48 + + + + + + +
 *
+ +49 + + + + + + +
 * <p>The values contained here are parsed from the {@link AuthenticatorData} structure.
+ +50 + + + + + + +
 *
+ +51 + + + + + + +
 * <p>The client extension outputs are represented by the {@link ClientRegistrationExtensionOutputs}
+ +52 + + + + + + +
 * type.
+ +53 + + + + + + +
 *
+ +54 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-extensions">§9. WebAuthn
+ +55 + + + + + + +
 *     Extensions</a>
+ +56 + + + + + + +
 */
+ +57 + + + + + + +
@Value
+ +58 + + + + + + +
@Builder(toBuilder = true)
+ +59 + + + + + + +
@Slf4j
+ +60 + + + + + + +
@JsonIgnoreProperties(ignoreUnknown = true)
+ +61 + + + + + + +
public final class AuthenticatorAssertionExtensionOutputs implements AuthenticatorExtensionOutputs {
+ +62 + + + + + + +
+ +63 + + + + + + +
  private final List<Extensions.Uvm.UvmEntry> uvm;
+ +64 + + + + + + +
+ +65 + + + + + + +
  @JsonCreator
+ +66 + + + + + + +
  private AuthenticatorAssertionExtensionOutputs(
+ +67 + + + + + + +
      @JsonProperty("uvm") List<Extensions.Uvm.UvmEntry> uvm) {
+ +68 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    this.uvm = uvm == null ? null : CollectionUtil.immutableList(uvm);
+ +69 + + + + + + +
  }
+ +70 + + + + + + +
+ +71 + + + + + + +
  /**
+ +72 + + + + + + +
   * Parse <a
+ +73 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authentication-extension">authentication</a>
+ +74 + + + + + + +
   * <a
+ +75 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">authenticator
+ +76 + + + + + + +
   * extension outputs</a> from the given authenticator data.
+ +77 + + + + + + +
   *
+ +78 + + + + + + +
   * <p>If the <code>authData</code> does not contain authenticator extension outputs, this returns
+ +79 + + + + + + +
   * an empty {@link Optional}.
+ +80 + + + + + + +
   *
+ +81 + + + + + + +
   * <p>Otherwise, this returns a present {@link Optional} containing an {@link
+ +82 + + + + + + +
   * AuthenticatorAssertionExtensionOutputs} value with all validly-formatted <a
+ +83 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authentication-extension">authentication</a>
+ +84 + + + + + + +
   * <a
+ +85 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">extension
+ +86 + + + + + + +
   * outputs</a> supported by this library. This silently ignores <a
+ +87 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#registration-extension">registration</a>
+ +88 + + + + + + +
   * extension outputs, malformed extension outputs, and unsupported extensions. The raw set of
+ +89 + + + + + + +
   * extension outputs can instead be obtained via {@link AuthenticatorData#getExtensions()}.
+ +90 + + + + + + +
   *
+ +91 + + + + + + +
   * <p>Note that a present {@link AuthenticatorAssertionExtensionOutputs} may contain zero
+ +92 + + + + + + +
   * extension outputs.
+ +93 + + + + + + +
   *
+ +94 + + + + + + +
   * @param authData the <a
+ +95 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-data">authenticator
+ +96 + + + + + + +
   *     data</a> to parse extension outputs from
+ +97 + + + + + + +
   * @return an empty {@link Optional} if the <code>authData</code> does not contain authenticator
+ +98 + + + + + + +
   *     extension outputs. Otherwise a present {@link Optional} containing parsed extension output
+ +99 + + + + + + +
   *     values.
+ +100 + + + + + + +
   */
+ +101 + + + + + + +
  public static Optional<AuthenticatorAssertionExtensionOutputs> fromAuthenticatorData(
+ +102 + + + + + + +
      AuthenticatorData authData) {
+ +103 + + +1 + +1. fromAuthenticatorData : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::fromAuthenticatorData → KILLED
+ +
+
+
    return authData.getExtensions().flatMap(AuthenticatorAssertionExtensionOutputs::fromCbor);
+ +104 + + + + + + +
  }
+ +105 + + + + + + +
+ +106 + + + + + + +
  static Optional<AuthenticatorAssertionExtensionOutputs> fromCbor(CBORObject cbor) {
+ +107 + + + + + + +
    AuthenticatorAssertionExtensionOutputs.AuthenticatorAssertionExtensionOutputsBuilder b =
+ +108 + + + + + + +
        builder();
+ +109 + + + + + + +
+ +110 + + +1 + +1. fromCbor : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
    Extensions.Uvm.parseAuthenticatorExtensionOutput(cbor).ifPresent(b::uvm);
+ +111 + + + + + + +
+ +112 + + + + + + +
    AuthenticatorAssertionExtensionOutputs result = b.build();
+ +113 + + + + + + +
+ +114 + + +1 + +1. fromCbor : negated conditional → KILLED
+ +
+
+
    if (result.getExtensionIds().isEmpty()) {
+ +115 + + + + + + +
      return Optional.empty();
+ +116 + + + + + + +
    } else {
+ +117 + + +1 + +1. fromCbor : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::fromCbor → KILLED
+ +
+
+
      return Optional.of(result);
+ +118 + + + + + + +
    }
+ +119 + + + + + + +
  }
+ +120 + + + + + + +
+ +121 + + + + + + +
  @Override
+ +122 + + + + + + +
  @EqualsAndHashCode.Include
+ +123 + + + + + + +
  public Set<String> getExtensionIds() {
+ +124 + + + + + + +
    HashSet<String> ids = new HashSet<>();
+ +125 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (uvm != null) {
+ +126 + + + + + + +
      ids.add(Extensions.Uvm.EXTENSION_ID);
+ +127 + + + + + + +
    }
+ +128 + + +1 + +1. getExtensionIds : replaced return value with Collections.emptySet for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::getExtensionIds → KILLED
+ +
+
+
    return ids;
+ +129 + + + + + + +
  }
+ +130 + + + + + + +
+ +131 + + + + + + +
  /**
+ +132 + + + + + + +
   * @return The <a
+ +133 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">authenticator
+ +134 + + + + + + +
   *     extension output</a> for the <a
+ +135 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">User
+ +136 + + + + + + +
   *     Verification Method (<code>uvm</code>) extension</a>, if any.
+ +137 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">§10.3.
+ +138 + + + + + + +
   *     User Verification Method extension (uvm)</a>
+ +139 + + + + + + +
   */
+ +140 + + + + + + +
  public Optional<List<Extensions.Uvm.UvmEntry>> getUvm() {
+ +141 + + +1 + +1. getUvm : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::getUvm → KILLED
+ +
+
+
    return Optional.ofNullable(uvm);
+ +142 + + + + + + +
  }
+ +143 + + + + + + +
}

Mutations

68 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
103 + + + +

1.1
Location : fromAuthenticatorData
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::fromAuthenticatorData → KILLED

+
110 + + + +

1.1
Location : fromCbor
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to java/util/Optional::ifPresent → KILLED

+
114 + + + +

1.1
Location : fromCbor
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
117 + + + +

1.1
Location : fromCbor
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::fromCbor → KILLED

+
125 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
128 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Collections.emptySet for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::getExtensionIds → KILLED

+
141 + + + +

1.1
Location : getUvm
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::getUvm → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAssertionResponse.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAssertionResponse.java.html new file mode 100644 index 000000000..b54ae439c --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAssertionResponse.java.html @@ -0,0 +1,2881 @@ + + + + + + + + + +

AuthenticatorAssertionResponse.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import com.yubico.webauthn.data.exception.Base64UrlException;
+ +30 + + + + + + +
import java.io.IOException;
+ +31 + + + + + + +
import java.util.Optional;
+ +32 + + + + + + +
import lombok.Builder;
+ +33 + + + + + + +
import lombok.Getter;
+ +34 + + + + + + +
import lombok.NonNull;
+ +35 + + + + + + +
import lombok.Value;
+ +36 + + + + + + +
+ +37 + + + + + + +
/**
+ +38 + + + + + + +
 * Represents an authenticator's response to a client’s request for generation of a new
+ +39 + + + + + + +
 * authentication assertion given the WebAuthn Relying Party's {@linkplain
+ +40 + + + + + + +
 * PublicKeyCredentialRequestOptions#getChallenge()} challenge} and OPTIONAL {@linkplain
+ +41 + + + + + + +
 * PublicKeyCredentialRequestOptions#getAllowCredentials()} list of credentials} it is aware of.
+ +42 + + + + + + +
 * This response contains a cryptographic {@linkplain #signature} proving possession of the
+ +43 + + + + + + +
 * credential private key, and optionally evidence of user consent to a specific transaction.
+ +44 + + + + + + +
 *
+ +45 + + + + + + +
 * @see <a
+ +46 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticatorassertionresponse">§5.2.2.
+ +47 + + + + + + +
 *     Web Authentication Assertion (interface AuthenticatorAssertionResponse) </a>
+ +48 + + + + + + +
 */
+ +49 + + + + + + +
@Value
+ +50 + + + + + + +
public class AuthenticatorAssertionResponse implements AuthenticatorResponse {
+ +51 + + + + + + +
+ +52 + + + + + + +
  @NonNull
+ +53 + + + + + + +
  @Getter(onMethod = @__({@Override}))
+ +54 + + + + + + +
  private final ByteArray authenticatorData;
+ +55 + + + + + + +
+ +56 + + + + + + +
  @NonNull
+ +57 + + + + + + +
  @Getter(onMethod = @__({@Override}))
+ +58 + + + + + + +
  private final ByteArray clientDataJSON;
+ +59 + + + + + + +
+ +60 + + + + + + +
  /**
+ +61 + + + + + + +
   * The raw signature returned from the authenticator. See <a
+ +62 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-op-get-assertion">§6.3.3 The
+ +63 + + + + + + +
   * authenticatorGetAssertion Operation</a>.
+ +64 + + + + + + +
   */
+ +65 + + + + + + +
  @NonNull private final ByteArray signature;
+ +66 + + + + + + +
+ +67 + + + + + + +
  /**
+ +68 + + + + + + +
   * The user handle returned from the authenticator, or empty if the authenticator did not return a
+ +69 + + + + + + +
   * user handle. See <a
+ +70 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-op-get-assertion">§6.3.3 The
+ +71 + + + + + + +
   * authenticatorGetAssertion Operation</a>.
+ +72 + + + + + + +
   */
+ +73 + + + + + + +
  private final ByteArray userHandle;
+ +74 + + + + + + +
+ +75 + + + + + + +
  // This overrides the default getter in AuthenticatorResponse which re-parses the authenticator
+ +76 + + + + + + +
  // data on every invocation. This "optimization" has no measurable impact on performance, but it
+ +77 + + + + + + +
  // seems rude to obviously waste cycles for nothing.
+ +78 + + + + + + +
  private final transient AuthenticatorData parsedAuthenticatorData;
+ +79 + + + + + + +
+ +80 + + + + + + +
  @NonNull
+ +81 + + + + + + +
  @Getter(onMethod = @__({@Override}))
+ +82 + + + + + + +
  private final transient CollectedClientData clientData;
+ +83 + + + + + + +
+ +84 + + + + + + +
  @JsonCreator
+ +85 + + + + + + +
  @Builder(toBuilder = true)
+ +86 + + + + + + +
  private AuthenticatorAssertionResponse(
+ +87 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("authenticatorData") final ByteArray authenticatorData,
+ +88 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("clientDataJSON") final ByteArray clientDataJSON,
+ +89 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("signature") final ByteArray signature,
+ +90 + + + + + + +
      @JsonProperty("userHandle") final ByteArray userHandle)
+ +91 + + + + + + +
      throws IOException, Base64UrlException {
+ +92 + + + + + + +
    this.authenticatorData = authenticatorData;
+ +93 + + + + + + +
    this.parsedAuthenticatorData = new AuthenticatorData(authenticatorData);
+ +94 + + + + + + +
    this.clientDataJSON = clientDataJSON;
+ +95 + + + + + + +
    this.signature = signature;
+ +96 + + + + + + +
    this.userHandle = userHandle;
+ +97 + + + + + + +
    this.clientData = new CollectedClientData(this.clientDataJSON);
+ +98 + + + + + + +
  }
+ +99 + + + + + + +
+ +100 + + + + + + +
  /**
+ +101 + + + + + + +
   * The user handle returned from the authenticator, or empty if the authenticator did not return a
+ +102 + + + + + + +
   * user handle. See <a
+ +103 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-op-get-assertion">§6.3.3 The
+ +104 + + + + + + +
   * authenticatorGetAssertion Operation</a>.
+ +105 + + + + + + +
   */
+ +106 + + + + + + +
  public Optional<ByteArray> getUserHandle() {
+ +107 + + +1 + +1. getUserHandle : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionResponse::getUserHandle → KILLED
+ +
+
+
    return Optional.ofNullable(userHandle);
+ +108 + + + + + + +
  }
+ +109 + + + + + + +
+ +110 + + + + + + +
  public static AuthenticatorAssertionResponseBuilder.MandatoryStages builder() {
+ +111 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse::builder → KILLED
+ +
+
+
    return new AuthenticatorAssertionResponseBuilder.MandatoryStages();
+ +112 + + + + + + +
  }
+ +113 + + + + + + +
+ +114 + + + + + + +
  public static class AuthenticatorAssertionResponseBuilder {
+ +115 + + + + + + +
    private ByteArray userHandle = null;
+ +116 + + + + + + +
+ +117 + + + + + + +
    public static class MandatoryStages {
+ +118 + + + + + + +
      private final AuthenticatorAssertionResponseBuilder builder =
+ +119 + + + + + + +
          new AuthenticatorAssertionResponseBuilder();
+ +120 + + + + + + +
+ +121 + + + + + + +
      /**
+ +122 + + + + + + +
       * {@link AuthenticatorAssertionResponseBuilder#authenticatorData(ByteArray)
+ +123 + + + + + + +
       * authenticatorData} is a required parameter.
+ +124 + + + + + + +
       *
+ +125 + + + + + + +
       * @see AuthenticatorAssertionResponseBuilder#authenticatorData(ByteArray)
+ +126 + + + + + + +
       */
+ +127 + + + + + + +
      public Step2 authenticatorData(ByteArray authenticatorData) {
+ +128 + + + + + + +
        builder.authenticatorData(authenticatorData);
+ +129 + + +1 + +1. authenticatorData : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages::authenticatorData → KILLED
+ +
+
+
        return new Step2();
+ +130 + + + + + + +
      }
+ +131 + + + + + + +
+ +132 + + + + + + +
      public class Step2 {
+ +133 + + + + + + +
        /**
+ +134 + + + + + + +
         * {@link AuthenticatorAssertionResponseBuilder#clientDataJSON(ByteArray) clientDataJSON} is
+ +135 + + + + + + +
         * a required parameter.
+ +136 + + + + + + +
         *
+ +137 + + + + + + +
         * @see AuthenticatorAssertionResponseBuilder#clientDataJSON(ByteArray)
+ +138 + + + + + + +
         */
+ +139 + + + + + + +
        public Step3 clientDataJSON(ByteArray clientDataJSON) {
+ +140 + + + + + + +
          builder.clientDataJSON(clientDataJSON);
+ +141 + + +1 + +1. clientDataJSON : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step2::clientDataJSON → KILLED
+ +
+
+
          return new Step3();
+ +142 + + + + + + +
        }
+ +143 + + + + + + +
      }
+ +144 + + + + + + +
+ +145 + + + + + + +
      public class Step3 {
+ +146 + + + + + + +
        /**
+ +147 + + + + + + +
         * {@link AuthenticatorAssertionResponseBuilder#signature(ByteArray) signature} is a
+ +148 + + + + + + +
         * required parameter.
+ +149 + + + + + + +
         *
+ +150 + + + + + + +
         * @see AuthenticatorAssertionResponseBuilder#signature(ByteArray)
+ +151 + + + + + + +
         */
+ +152 + + + + + + +
        public AuthenticatorAssertionResponseBuilder signature(ByteArray signature) {
+ +153 + + +1 + +1. signature : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step3::signature → KILLED
+ +
+
+
          return builder.signature(signature);
+ +154 + + + + + + +
        }
+ +155 + + + + + + +
      }
+ +156 + + + + + + +
    }
+ +157 + + + + + + +
+ +158 + + + + + + +
    /**
+ +159 + + + + + + +
     * The user handle returned from the authenticator, or empty if the authenticator did not return
+ +160 + + + + + + +
     * a user handle. See <a
+ +161 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-op-get-assertion">§6.3.3 The
+ +162 + + + + + + +
     * authenticatorGetAssertion Operation</a>.
+ +163 + + + + + + +
     */
+ +164 + + + + + + +
    public AuthenticatorAssertionResponseBuilder userHandle(
+ +165 + + +1 + +1. userHandle : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<ByteArray> userHandle) {
+ +166 + + +1 + +1. userHandle : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder::userHandle → KILLED
+ +
+
+
      return this.userHandle(userHandle.orElse(null));
+ +167 + + + + + + +
    }
+ +168 + + + + + + +
+ +169 + + + + + + +
    /**
+ +170 + + + + + + +
     * The user handle returned from the authenticator, or empty if the authenticator did not return
+ +171 + + + + + + +
     * a user handle. See <a
+ +172 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-op-get-assertion">§6.3.3 The
+ +173 + + + + + + +
     * authenticatorGetAssertion Operation</a>.
+ +174 + + + + + + +
     */
+ +175 + + + + + + +
    public AuthenticatorAssertionResponseBuilder userHandle(ByteArray userHandle) {
+ +176 + + + + + + +
      this.userHandle = userHandle;
+ +177 + + +1 + +1. userHandle : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder::userHandle → KILLED
+ +
+
+
      return this;
+ +178 + + + + + + +
    }
+ +179 + + + + + + +
  }
+ +180 + + + + + + +
}

Mutations

87 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
88 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
89 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
107 + + + +

1.1
Location : getUserHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionResponse::getUserHandle → KILLED

+
111 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse::builder → KILLED

+
129 + + + +

1.1
Location : authenticatorData
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages::authenticatorData → KILLED

+
141 + + + +

1.1
Location : clientDataJSON
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step2::clientDataJSON → KILLED

+
153 + + + +

1.1
Location : signature
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step3::signature → KILLED

+
165 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
166 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder::userHandle → KILLED

+
177 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder::userHandle → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAttachment.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAttachment.java.html new file mode 100644 index 000000000..f22885f06 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAttachment.java.html @@ -0,0 +1,1524 @@ + + + + + + + + + +

AuthenticatorAttachment.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +29 + + + + + + +
import java.util.Optional;
+ +30 + + + + + + +
import java.util.stream.Stream;
+ +31 + + + + + + +
import lombok.AllArgsConstructor;
+ +32 + + + + + + +
import lombok.Getter;
+ +33 + + + + + + +
import lombok.NonNull;
+ +34 + + + + + + +
+ +35 + + + + + + +
/**
+ +36 + + + + + + +
 * This enumeration’s values describe authenticators' <a
+ +37 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-attachment-modality">attachment
+ +38 + + + + + + +
 * modalities</a>. Relying Parties use this for two purposes:
+ +39 + + + + + + +
 *
+ +40 + + + + + + +
 * <ul>
+ +41 + + + + + + +
 *   <li>to express a preferred authenticator attachment modality when calling <code>
+ +42 + + + + + + +
 *       navigator.credentials.create()</code> to create a credential, and
+ +43 + + + + + + +
 *   <li>to inform the client of the Relying Party's best belief about how to locate the managing
+ +44 + + + + + + +
 *       authenticators of the credentials listed in {@link
+ +45 + + + + + + +
 *       PublicKeyCredentialRequestOptions#getAllowCredentials()} when calling <code>
+ +46 + + + + + + +
 *       navigator.credentials.get()</code>.
+ +47 + + + + + + +
 * </ul>
+ +48 + + + + + + +
 *
+ +49 + + + + + + +
 * @see <a
+ +50 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enumdef-authenticatorattachment">§5.4.5.
+ +51 + + + + + + +
 *     Authenticator Attachment Enumeration (enum AuthenticatorAttachment) </a>
+ +52 + + + + + + +
 */
+ +53 + + + + + + +
@AllArgsConstructor
+ +54 + + + + + + +
public enum AuthenticatorAttachment {
+ +55 + + + + + + +
+ +56 + + + + + + +
  /**
+ +57 + + + + + + +
   * Indicates <a
+ +58 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#cross-platform-attachment">cross-platform
+ +59 + + + + + + +
   * attachment</a>.
+ +60 + + + + + + +
   *
+ +61 + + + + + + +
   * <p>Authenticators of this class are removable from, and can "roam" among, client platforms.
+ +62 + + + + + + +
   */
+ +63 + + + + + + +
  CROSS_PLATFORM("cross-platform"),
+ +64 + + + + + + +
+ +65 + + + + + + +
  /**
+ +66 + + + + + + +
   * Indicates <a
+ +67 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#platform-attachment">platform
+ +68 + + + + + + +
   * attachment</a>.
+ +69 + + + + + + +
   *
+ +70 + + + + + + +
   * <p>Usually, authenticators of this class are not removable from the platform.
+ +71 + + + + + + +
   */
+ +72 + + + + + + +
  PLATFORM("platform");
+ +73 + + + + + + +
+ +74 + + + + + + +
  @JsonValue @Getter @NonNull private final String value;
+ +75 + + + + + + +
+ +76 + + + + + + +
  /**
+ +77 + + + + + + +
   * Attempt to parse a string as an {@link AuthenticatorAttachment}.
+ +78 + + + + + + +
   *
+ +79 + + + + + + +
   * @param value a {@link String} equal to the {@link #getValue() value} of a constant in {@link
+ +80 + + + + + + +
   *     AuthenticatorAttachment}
+ +81 + + + + + + +
   * @return The {@link AuthenticatorAttachment} instance whose {@link #getValue() value} equals
+ +82 + + + + + + +
   *     <code>value</code>, if any.
+ +83 + + + + + + +
   * @see <a
+ +84 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enumdef-authenticatorattachment">§5.4.5.
+ +85 + + + + + + +
   *     Authenticator Attachment Enumeration (enum AuthenticatorAttachment) </a>
+ +86 + + + + + + +
   */
+ +87 + + +1 + +1. fromValue : negated conditional → KILLED
+ +
+
+
  public static Optional<AuthenticatorAttachment> fromValue(@NonNull String value) {
+ +88 + + +3 + +1. fromValue : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAttachment::fromValue → KILLED
+2. lambda$fromValue$0 : replaced boolean return with true for com/yubico/webauthn/data/AuthenticatorAttachment::lambda$fromValue$0 → KILLED
+3. lambda$fromValue$0 : replaced boolean return with false for com/yubico/webauthn/data/AuthenticatorAttachment::lambda$fromValue$0 → KILLED
+ +
+
+
    return Stream.of(values()).filter(v -> v.value.equals(value)).findAny();
+ +89 + + + + + + +
  }
+ +90 + + + + + + +
+ +91 + + + + + + +
  @JsonCreator
+ +92 + + +1 + +1. fromJsonString : negated conditional → KILLED
+ +
+
+
  private static AuthenticatorAttachment fromJsonString(@NonNull String value) {
+ +93 + + +1 + +1. fromJsonString : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttachment::fromJsonString → KILLED
+ +
+
+
    return fromValue(value).orElse(null);
+ +94 + + + + + + +
  }
+ +95 + + + + + + +
}

Mutations

87 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

+
88 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAttachment::fromValue → KILLED

2.2
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced boolean return with true for com/yubico/webauthn/data/AuthenticatorAttachment::lambda$fromValue$0 → KILLED

3.3
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced boolean return with false for com/yubico/webauthn/data/AuthenticatorAttachment::lambda$fromValue$0 → KILLED

+
92 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

+
93 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttachment::fromJsonString → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAttestationResponse.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAttestationResponse.java.html new file mode 100644 index 000000000..4e2d94198 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorAttestationResponse.java.html @@ -0,0 +1,2575 @@ + + + + + + + + + +

AuthenticatorAttestationResponse.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnore;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+ +30 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +31 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +32 + + + + + + +
import com.yubico.webauthn.data.exception.Base64UrlException;
+ +33 + + + + + + +
import java.io.IOException;
+ +34 + + + + + + +
import java.util.Collections;
+ +35 + + + + + + +
import java.util.Set;
+ +36 + + + + + + +
import java.util.SortedSet;
+ +37 + + + + + + +
import lombok.Builder;
+ +38 + + + + + + +
import lombok.Getter;
+ +39 + + + + + + +
import lombok.NonNull;
+ +40 + + + + + + +
import lombok.Value;
+ +41 + + + + + + +
+ +42 + + + + + + +
/**
+ +43 + + + + + + +
 * Represents the authenticator's response to a client's request for the creation of a new public
+ +44 + + + + + + +
 * key credential. It contains information about the new credential that can be used to identify it
+ +45 + + + + + + +
 * for later use, and metadata that can be used by the WebAuthn Relying Party to assess the
+ +46 + + + + + + +
 * characteristics of the credential during registration.
+ +47 + + + + + + +
 *
+ +48 + + + + + + +
 * @see <a
+ +49 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticatorattestationresponse">§5.2.1.
+ +50 + + + + + + +
 *     Information About Public Key Credential (interface AuthenticatorAttestationResponse) </a>
+ +51 + + + + + + +
 */
+ +52 + + + + + + +
@Value
+ +53 + + + + + + +
@JsonIgnoreProperties({"publicKey", "publicKeyAlgorithm"})
+ +54 + + + + + + +
public class AuthenticatorAttestationResponse implements AuthenticatorResponse {
+ +55 + + + + + + +
+ +56 + + + + + + +
  /**
+ +57 + + + + + + +
   * Contains an attestation object, which is opaque to, and cryptographically protected against
+ +58 + + + + + + +
   * tampering by, the client. The attestation object contains both authenticator data and an
+ +59 + + + + + + +
   * attestation statement. The former contains the AAGUID, a unique credential ID, and the
+ +60 + + + + + + +
   * credential public key. The contents of the attestation statement are determined by the
+ +61 + + + + + + +
   * attestation statement format used by the authenticator. It also contains any additional
+ +62 + + + + + + +
   * information that the Relying Party's server requires to validate the attestation statement, as
+ +63 + + + + + + +
   * well as to decode and validate the authenticator data along with the JSON-serialized client
+ +64 + + + + + + +
   * data. For more details, see <a
+ +65 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4
+ +66 + + + + + + +
   * Attestation</a>, <a
+ +67 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-generating-an-attestation-object">§6.4.4
+ +68 + + + + + + +
   * Generating an Attestation Object</a>, and <a
+ +69 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#fig-attStructs">Figure 5</a>.
+ +70 + + + + + + +
   */
+ +71 + + + + + + +
  @NonNull private final ByteArray attestationObject;
+ +72 + + + + + + +
+ +73 + + + + + + +
  @NonNull
+ +74 + + + + + + +
  @Getter(onMethod = @__({@Override}))
+ +75 + + + + + + +
  private final ByteArray clientDataJSON;
+ +76 + + + + + + +
+ +77 + + + + + + +
  /**
+ +78 + + + + + + +
   * The return value from the <code>AuthenticatorAttestationResponse.getTransports()</code> method.
+ +79 + + + + + + +
   *
+ +80 + + + + + + +
   * @see <a
+ +81 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticatorattestationresponse-gettransports">§5.2.1.
+ +82 + + + + + + +
   *     Information About Public Key Credential (interface AuthenticatorAttestationResponse)</a>
+ +83 + + + + + + +
   */
+ +84 + + + + + + +
  private final SortedSet<AuthenticatorTransport> transports;
+ +85 + + + + + + +
+ +86 + + + + + + +
  /** The {@link #attestationObject} parsed as a domain object. */
+ +87 + + + + + + +
  @NonNull
+ +88 + + + + + + +
  @JsonIgnore
+ +89 + + + + + + +
  @Getter(onMethod = @__({@JsonIgnore}))
+ +90 + + + + + + +
  private final transient AttestationObject attestation;
+ +91 + + + + + + +
+ +92 + + + + + + +
  @NonNull
+ +93 + + + + + + +
  @JsonIgnore
+ +94 + + + + + + +
  @Getter(onMethod = @__({@Override}))
+ +95 + + + + + + +
  private final transient CollectedClientData clientData;
+ +96 + + + + + + +
+ +97 + + + + + + +
  @Override
+ +98 + + + + + + +
  @JsonIgnore
+ +99 + + + + + + +
  public ByteArray getAuthenticatorData() {
+ +100 + + +1 + +1. getAuthenticatorData : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::getAuthenticatorData → NO_COVERAGE
+ +
+
+
    return attestation.getAuthenticatorData().getBytes();
+ +101 + + + + + + +
  }
+ +102 + + + + + + +
+ +103 + + + + + + +
  @Builder(toBuilder = true)
+ +104 + + + + + + +
  @JsonCreator
+ +105 + + + + + + +
  private AuthenticatorAttestationResponse(
+ +106 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("attestationObject") ByteArray attestationObject,
+ +107 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("clientDataJSON") ByteArray clientDataJSON,
+ +108 + + + + + + +
      @JsonProperty("transports") Set<AuthenticatorTransport> transports)
+ +109 + + + + + + +
      throws IOException, Base64UrlException {
+ +110 + + + + + + +
    this.attestationObject = attestationObject;
+ +111 + + + + + + +
    this.clientDataJSON = clientDataJSON;
+ +112 + + + + + + +
    this.transports =
+ +113 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        transports == null
+ +114 + + + + + + +
            ? Collections.emptySortedSet()
+ +115 + + + + + + +
            : CollectionUtil.immutableSortedSet(transports);
+ +116 + + + + + + +
+ +117 + + + + + + +
    attestation = new AttestationObject(attestationObject);
+ +118 + + + + + + +
    this.clientData = new CollectedClientData(clientDataJSON);
+ +119 + + + + + + +
  }
+ +120 + + + + + + +
+ +121 + + + + + + +
  // The default getter in AuthenticatorResponse re-parses the authenticator data on every
+ +122 + + + + + + +
  // invocation. This "optimization" override has no measurable impact on performance, but it seems
+ +123 + + + + + + +
  // rude to obviously waste cycles for nothing.
+ +124 + + + + + + +
  @Override
+ +125 + + + + + + +
  public AuthenticatorData getParsedAuthenticatorData() {
+ +126 + + +1 + +1. getParsedAuthenticatorData : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::getParsedAuthenticatorData → KILLED
+ +
+
+
    return attestation.getAuthenticatorData();
+ +127 + + + + + + +
  }
+ +128 + + + + + + +
+ +129 + + + + + + +
  public static AuthenticatorAttestationResponseBuilder.MandatoryStages builder() {
+ +130 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::builder → KILLED
+ +
+
+
    return new AuthenticatorAttestationResponseBuilder.MandatoryStages();
+ +131 + + + + + + +
  }
+ +132 + + + + + + +
+ +133 + + + + + + +
  public static class AuthenticatorAttestationResponseBuilder {
+ +134 + + + + + + +
    public static class MandatoryStages {
+ +135 + + + + + + +
      private final AuthenticatorAttestationResponseBuilder builder =
+ +136 + + + + + + +
          new AuthenticatorAttestationResponseBuilder();
+ +137 + + + + + + +
+ +138 + + + + + + +
      /**
+ +139 + + + + + + +
       * {@link AuthenticatorAttestationResponseBuilder#attestationObject(ByteArray)
+ +140 + + + + + + +
       * attestationObject} is a required parameter.
+ +141 + + + + + + +
       *
+ +142 + + + + + + +
       * @see AuthenticatorAttestationResponseBuilder#attestationObject(ByteArray)
+ +143 + + + + + + +
       */
+ +144 + + + + + + +
      public Step2 attestationObject(ByteArray attestationObject) {
+ +145 + + + + + + +
        builder.attestationObject(attestationObject);
+ +146 + + +1 + +1. attestationObject : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages::attestationObject → KILLED
+ +
+
+
        return new Step2();
+ +147 + + + + + + +
      }
+ +148 + + + + + + +
+ +149 + + + + + + +
      public class Step2 {
+ +150 + + + + + + +
        /**
+ +151 + + + + + + +
         * {@link AuthenticatorAttestationResponseBuilder#clientDataJSON(ByteArray) clientDataJSON}
+ +152 + + + + + + +
         * is a required parameter.
+ +153 + + + + + + +
         *
+ +154 + + + + + + +
         * @see AuthenticatorAttestationResponseBuilder#clientDataJSON(ByteArray)
+ +155 + + + + + + +
         */
+ +156 + + + + + + +
        public AuthenticatorAttestationResponseBuilder clientDataJSON(ByteArray clientDataJSON) {
+ +157 + + +1 + +1. clientDataJSON : replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages$Step2::clientDataJSON → KILLED
+ +
+
+
          return builder.clientDataJSON(clientDataJSON);
+ +158 + + + + + + +
        }
+ +159 + + + + + + +
      }
+ +160 + + + + + + +
    }
+ +161 + + + + + + +
  }
+ +162 + + + + + + +
}

Mutations

100 + + + +

1.1
Location : getAuthenticatorData
Killed by : none
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::getAuthenticatorData → NO_COVERAGE

+
106 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
107 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
113 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
126 + + + +

1.1
Location : getParsedAuthenticatorData
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::getParsedAuthenticatorData → KILLED

+
130 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::builder → KILLED

+
146 + + + +

1.1
Location : attestationObject
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages::attestationObject → KILLED

+
157 + + + +

1.1
Location : clientDataJSON
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages$Step2::clientDataJSON → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorData.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorData.java.html new file mode 100644 index 000000000..61dfbc20f --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorData.java.html @@ -0,0 +1,4336 @@ + + + + + + + + + +

AuthenticatorData.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnore;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +30 + + + + + + +
import com.fasterxml.jackson.core.JsonGenerator;
+ +31 + + + + + + +
import com.fasterxml.jackson.databind.SerializerProvider;
+ +32 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+ +33 + + + + + + +
import com.upokecenter.cbor.CBORException;
+ +34 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +35 + + + + + + +
import com.yubico.internal.util.BinaryUtil;
+ +36 + + + + + + +
import com.yubico.internal.util.ExceptionUtil;
+ +37 + + + + + + +
import com.yubico.internal.util.JacksonCodecs;
+ +38 + + + + + + +
import java.io.ByteArrayInputStream;
+ +39 + + + + + + +
import java.io.IOException;
+ +40 + + + + + + +
import java.util.Arrays;
+ +41 + + + + + + +
import java.util.Optional;
+ +42 + + + + + + +
import lombok.NonNull;
+ +43 + + + + + + +
import lombok.Value;
+ +44 + + + + + + +
+ +45 + + + + + + +
/**
+ +46 + + + + + + +
 * The authenticator data structure is a byte array of 37 bytes or more. This class presents the
+ +47 + + + + + + +
 * authenticator data decoded as a high-level object.
+ +48 + + + + + + +
 *
+ +49 + + + + + + +
 * <p>The authenticator data structure encodes contextual bindings made by the authenticator. These
+ +50 + + + + + + +
 * bindings are controlled by the authenticator itself, and derive their trust from the WebAuthn
+ +51 + + + + + + +
 * Relying Party's assessment of the security properties of the authenticator. In one extreme case,
+ +52 + + + + + + +
 * the authenticator may be embedded in the client, and its bindings may be no more trustworthy than
+ +53 + + + + + + +
 * the client data. At the other extreme, the authenticator may be a discrete entity with
+ +54 + + + + + + +
 * high-security hardware and software, connected to the client over a secure channel. In both
+ +55 + + + + + + +
 * cases, the Relying Party receives the authenticator data in the same format, and uses its
+ +56 + + + + + + +
 * knowledge of the authenticator to make trust decisions.
+ +57 + + + + + + +
 *
+ +58 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-data">§6.1.
+ +59 + + + + + + +
 *     Authenticator Data</a>
+ +60 + + + + + + +
 */
+ +61 + + + + + + +
@Value
+ +62 + + + + + + +
@JsonSerialize(using = AuthenticatorData.JsonSerializer.class)
+ +63 + + + + + + +
public class AuthenticatorData {
+ +64 + + + + + + +
+ +65 + + + + + + +
  /**
+ +66 + + + + + + +
   * The original raw byte array that this object is decoded from. This is a byte array of 37 bytes
+ +67 + + + + + + +
   * or more.
+ +68 + + + + + + +
   *
+ +69 + + + + + + +
   * @see <a
+ +70 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-data">§6.1.
+ +71 + + + + + + +
   *     Authenticator Data</a>
+ +72 + + + + + + +
   */
+ +73 + + + + + + +
  @NonNull private final ByteArray bytes;
+ +74 + + + + + + +
+ +75 + + + + + + +
  /** The flags bit field. */
+ +76 + + + + + + +
  @NonNull private final transient AuthenticatorDataFlags flags;
+ +77 + + + + + + +
+ +78 + + + + + + +
  /**
+ +79 + + + + + + +
   * Attested credential data, if present.
+ +80 + + + + + + +
   *
+ +81 + + + + + + +
   * <p>This member is present if and only if the {@link AuthenticatorDataFlags#AT} flag is set.
+ +82 + + + + + + +
   *
+ +83 + + + + + + +
   * @see #flags
+ +84 + + + + + + +
   */
+ +85 + + + + + + +
  @JsonIgnore private final transient AttestedCredentialData attestedCredentialData;
+ +86 + + + + + + +
+ +87 + + + + + + +
  @JsonIgnore private final transient CBORObject extensions;
+ +88 + + + + + + +
+ +89 + + + + + + +
  private static final int RP_ID_HASH_INDEX = 0;
+ +90 + + + + + + +
  private static final int RP_ID_HASH_END = RP_ID_HASH_INDEX + 32;
+ +91 + + + + + + +
+ +92 + + + + + + +
  private static final int FLAGS_INDEX = RP_ID_HASH_END;
+ +93 + + + + + + +
  private static final int FLAGS_END = FLAGS_INDEX + 1;
+ +94 + + + + + + +
+ +95 + + + + + + +
  private static final int COUNTER_INDEX = FLAGS_END;
+ +96 + + + + + + +
  private static final int COUNTER_END = COUNTER_INDEX + 4;
+ +97 + + + + + + +
+ +98 + + + + + + +
  private static final int FIXED_LENGTH_PART_END_INDEX = COUNTER_END;
+ +99 + + + + + + +
+ +100 + + + + + + +
  /** Decode an {@link AuthenticatorData} object from a raw authenticator data byte array. */
+ +101 + + + + + + +
  @JsonCreator
+ +102 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
  public AuthenticatorData(@NonNull ByteArray bytes) {
+ +103 + + +1 + +1. <init> : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +104 + + +2 + +1. <init> : negated conditional → KILLED
+2. <init> : changed conditional boundary → KILLED
+ +
+
+
        bytes.size() >= FIXED_LENGTH_PART_END_INDEX,
+ +105 + + + + + + +
        "%s byte array must be at least %d bytes, was %d: %s",
+ +106 + + + + + + +
        AuthenticatorData.class.getSimpleName(),
+ +107 + + + + + + +
        FIXED_LENGTH_PART_END_INDEX,
+ +108 + + + + + + +
        bytes.size(),
+ +109 + + + + + + +
        bytes.getBase64Url());
+ +110 + + + + + + +
+ +111 + + + + + + +
    this.bytes = bytes;
+ +112 + + + + + + +
+ +113 + + + + + + +
    final byte[] rawBytes = bytes.getBytes();
+ +114 + + + + + + +
+ +115 + + + + + + +
    this.flags = new AuthenticatorDataFlags(rawBytes[FLAGS_INDEX]);
+ +116 + + + + + + +
+ +117 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    if (flags.AT) {
+ +118 + + + + + + +
      VariableLengthParseResult parseResult =
+ +119 + + + + + + +
          parseAttestedCredentialData(
+ +120 + + + + + + +
              flags, Arrays.copyOfRange(rawBytes, FIXED_LENGTH_PART_END_INDEX, rawBytes.length));
+ +121 + + + + + + +
      attestedCredentialData = parseResult.getAttestedCredentialData();
+ +122 + + + + + + +
      extensions = parseResult.getExtensions();
+ +123 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    } else if (flags.ED) {
+ +124 + + + + + + +
      attestedCredentialData = null;
+ +125 + + + + + + +
      extensions =
+ +126 + + + + + + +
          parseExtensions(
+ +127 + + + + + + +
              Arrays.copyOfRange(rawBytes, FIXED_LENGTH_PART_END_INDEX, rawBytes.length));
+ +128 + + + + + + +
    } else {
+ +129 + + + + + + +
      attestedCredentialData = null;
+ +130 + + + + + + +
      extensions = null;
+ +131 + + + + + + +
    }
+ +132 + + + + + + +
  }
+ +133 + + + + + + +
+ +134 + + + + + + +
  /** The SHA-256 hash of the RP ID the credential is scoped to. */
+ +135 + + + + + + +
  @JsonProperty("rpIdHash")
+ +136 + + + + + + +
  public ByteArray getRpIdHash() {
+ +137 + + +1 + +1. getRpIdHash : replaced return value with null for com/yubico/webauthn/data/AuthenticatorData::getRpIdHash → KILLED
+ +
+
+
    return new ByteArray(Arrays.copyOfRange(bytes.getBytes(), RP_ID_HASH_INDEX, RP_ID_HASH_END));
+ +138 + + + + + + +
  }
+ +139 + + + + + + +
+ +140 + + + + + + +
  /** The 32-bit unsigned signature counter. */
+ +141 + + + + + + +
  public long getSignatureCounter() {
+ +142 + + +1 + +1. getSignatureCounter : replaced long return with 0 for com/yubico/webauthn/data/AuthenticatorData::getSignatureCounter → KILLED
+ +
+
+
    return BinaryUtil.getUint32(Arrays.copyOfRange(bytes.getBytes(), COUNTER_INDEX, COUNTER_END));
+ +143 + + + + + + +
  }
+ +144 + + + + + + +
+ +145 + + + + + + +
  private static VariableLengthParseResult parseAttestedCredentialData(
+ +146 + + + + + + +
      AuthenticatorDataFlags flags, byte[] bytes) {
+ +147 + + + + + + +
    final int AAGUID_INDEX = 0;
+ +148 + + + + + + +
    final int AAGUID_END = AAGUID_INDEX + 16;
+ +149 + + + + + + +
+ +150 + + + + + + +
    final int CREDENTIAL_ID_LENGTH_INDEX = AAGUID_END;
+ +151 + + + + + + +
    final int CREDENTIAL_ID_LENGTH_END = CREDENTIAL_ID_LENGTH_INDEX + 2;
+ +152 + + + + + + +
+ +153 + + +3 + +1. parseAttestedCredentialData : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+2. parseAttestedCredentialData : changed conditional boundary → KILLED
+3. parseAttestedCredentialData : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +154 + + + + + + +
        bytes.length >= CREDENTIAL_ID_LENGTH_END,
+ +155 + + + + + + +
        "Attested credential data must contain at least %d bytes, was %d: %s",
+ +156 + + + + + + +
        CREDENTIAL_ID_LENGTH_END,
+ +157 + + + + + + +
        bytes.length,
+ +158 + + + + + + +
        new ByteArray(bytes));
+ +159 + + + + + + +
+ +160 + + + + + + +
    byte[] credentialIdLengthBytes =
+ +161 + + + + + + +
        Arrays.copyOfRange(bytes, CREDENTIAL_ID_LENGTH_INDEX, CREDENTIAL_ID_LENGTH_END);
+ +162 + + + + + + +
+ +163 + + + + + + +
    final int L;
+ +164 + + + + + + +
    try {
+ +165 + + + + + + +
      L = BinaryUtil.getUint16(credentialIdLengthBytes);
+ +166 + + + + + + +
    } catch (IllegalArgumentException e) {
+ +167 + + + + + + +
      throw new IllegalArgumentException(
+ +168 + + + + + + +
          "Invalid credential ID length bytes: " + Arrays.asList(credentialIdLengthBytes), e);
+ +169 + + + + + + +
    }
+ +170 + + + + + + +
+ +171 + + + + + + +
    final int CREDENTIAL_ID_INDEX = CREDENTIAL_ID_LENGTH_END;
+ +172 + + +1 + +1. parseAttestedCredentialData : Replaced integer addition with subtraction → KILLED
+ +
+
+
    final int CREDENTIAL_ID_END = CREDENTIAL_ID_INDEX + L;
+ +173 + + + + + + +
+ +174 + + + + + + +
    final int CREDENTIAL_PUBLIC_KEY_INDEX = CREDENTIAL_ID_END;
+ +175 + + + + + + +
    final int CREDENTIAL_PUBLIC_KEY_AND_EXTENSION_DATA_END = bytes.length;
+ +176 + + + + + + +
+ +177 + + +3 + +1. parseAttestedCredentialData : changed conditional boundary → SURVIVED
+2. parseAttestedCredentialData : negated conditional → KILLED
+3. parseAttestedCredentialData : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +178 + + + + + + +
        bytes.length >= CREDENTIAL_ID_END,
+ +179 + + + + + + +
        "Expected credential ID of length %d, but attested credential data and extension data is only %d bytes: %s",
+ +180 + + + + + + +
        CREDENTIAL_ID_END,
+ +181 + + + + + + +
        bytes.length,
+ +182 + + + + + + +
        new ByteArray(bytes));
+ +183 + + + + + + +
+ +184 + + + + + + +
    ByteArrayInputStream indefiniteLengthBytes =
+ +185 + + + + + + +
        new ByteArrayInputStream(
+ +186 + + + + + + +
            Arrays.copyOfRange(
+ +187 + + + + + + +
                bytes, CREDENTIAL_PUBLIC_KEY_INDEX, CREDENTIAL_PUBLIC_KEY_AND_EXTENSION_DATA_END));
+ +188 + + + + + + +
+ +189 + + + + + + +
    final CBORObject credentialPublicKey = CBORObject.Read(indefiniteLengthBytes);
+ +190 + + + + + + +
    final CBORObject extensions;
+ +191 + + + + + + +
+ +192 + + +2 + +1. parseAttestedCredentialData : changed conditional boundary → KILLED
+2. parseAttestedCredentialData : negated conditional → KILLED
+ +
+
+
    if (indefiniteLengthBytes.available() > 0) {
+ +193 + + +1 + +1. parseAttestedCredentialData : negated conditional → KILLED
+ +
+
+
      if (flags.ED) {
+ +194 + + + + + + +
        try {
+ +195 + + + + + + +
          extensions = CBORObject.Read(indefiniteLengthBytes);
+ +196 + + + + + + +
        } catch (CBORException e) {
+ +197 + + + + + + +
          throw new IllegalArgumentException("Failed to parse extension data", e);
+ +198 + + + + + + +
        }
+ +199 + + + + + + +
      } else {
+ +200 + + + + + + +
        throw new IllegalArgumentException(
+ +201 + + + + + + +
            String.format(
+ +202 + + + + + + +
                "Flags indicate no extension data, but %d bytes remain after attested credential data.",
+ +203 + + + + + + +
                indefiniteLengthBytes.available()));
+ +204 + + + + + + +
      }
+ +205 + + + + + + +
    } else {
+ +206 + + +1 + +1. parseAttestedCredentialData : negated conditional → KILLED
+ +
+
+
      if (flags.ED) {
+ +207 + + + + + + +
        throw new IllegalArgumentException(
+ +208 + + + + + + +
            "Flags indicate there should be extension data, but no bytes remain after attested credential data.");
+ +209 + + + + + + +
      } else {
+ +210 + + + + + + +
        extensions = null;
+ +211 + + + + + + +
      }
+ +212 + + + + + + +
    }
+ +213 + + + + + + +
+ +214 + + +1 + +1. parseAttestedCredentialData : replaced return value with null for com/yubico/webauthn/data/AuthenticatorData::parseAttestedCredentialData → KILLED
+ +
+
+
    return new VariableLengthParseResult(
+ +215 + + + + + + +
        AttestedCredentialData.builder()
+ +216 + + + + + + +
            .aaguid(new ByteArray(Arrays.copyOfRange(bytes, AAGUID_INDEX, AAGUID_END)))
+ +217 + + + + + + +
            .credentialId(
+ +218 + + + + + + +
                new ByteArray(Arrays.copyOfRange(bytes, CREDENTIAL_ID_INDEX, CREDENTIAL_ID_END)))
+ +219 + + + + + + +
            .credentialPublicKey(new ByteArray(credentialPublicKey.EncodeToBytes()))
+ +220 + + + + + + +
            .build(),
+ +221 + + + + + + +
        extensions);
+ +222 + + + + + + +
  }
+ +223 + + + + + + +
+ +224 + + + + + + +
  private static CBORObject parseExtensions(byte[] bytes) {
+ +225 + + + + + + +
    try {
+ +226 + + +1 + +1. parseExtensions : replaced return value with null for com/yubico/webauthn/data/AuthenticatorData::parseExtensions → KILLED
+ +
+
+
      return CBORObject.DecodeFromBytes(bytes);
+ +227 + + + + + + +
    } catch (CBORException e) {
+ +228 + + + + + + +
      throw new IllegalArgumentException("Failed to parse extension data", e);
+ +229 + + + + + + +
    }
+ +230 + + + + + + +
  }
+ +231 + + + + + + +
+ +232 + + + + + + +
  @Value
+ +233 + + + + + + +
  private static class VariableLengthParseResult {
+ +234 + + + + + + +
    AttestedCredentialData attestedCredentialData;
+ +235 + + + + + + +
    CBORObject extensions;
+ +236 + + + + + + +
  }
+ +237 + + + + + + +
+ +238 + + + + + + +
  /**
+ +239 + + + + + + +
   * Attested credential data, if present.
+ +240 + + + + + + +
   *
+ +241 + + + + + + +
   * <p>This member is present if and only if the {@link AuthenticatorDataFlags#AT} flag is set.
+ +242 + + + + + + +
   *
+ +243 + + + + + + +
   * @see #flags
+ +244 + + + + + + +
   */
+ +245 + + + + + + +
  public Optional<AttestedCredentialData> getAttestedCredentialData() {
+ +246 + + +1 + +1. getAttestedCredentialData : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorData::getAttestedCredentialData → KILLED
+ +
+
+
    return Optional.ofNullable(attestedCredentialData);
+ +247 + + + + + + +
  }
+ +248 + + + + + + +
+ +249 + + + + + + +
  /**
+ +250 + + + + + + +
   * Extension-defined authenticator data, if present.
+ +251 + + + + + + +
   *
+ +252 + + + + + + +
   * <p>This member is present if and only if the {@link AuthenticatorDataFlags#ED} flag is set.
+ +253 + + + + + + +
   *
+ +254 + + + + + + +
   * <p>Changes to the returned value are not reflected in the {@link AuthenticatorData} object.
+ +255 + + + + + + +
   *
+ +256 + + + + + + +
   * @see #flags
+ +257 + + + + + + +
   */
+ +258 + + + + + + +
  public Optional<CBORObject> getExtensions() {
+ +259 + + +1 + +1. getExtensions : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorData::getExtensions → KILLED
+ +
+
+
    return Optional.ofNullable(extensions).map(JacksonCodecs::deepCopy);
+ +260 + + + + + + +
  }
+ +261 + + + + + + +
+ +262 + + + + + + +
  static class JsonSerializer
+ +263 + + + + + + +
      extends com.fasterxml.jackson.databind.JsonSerializer<AuthenticatorData> {
+ +264 + + + + + + +
    @Override
+ +265 + + + + + + +
    public void serialize(
+ +266 + + + + + + +
        AuthenticatorData value, JsonGenerator gen, SerializerProvider serializers)
+ +267 + + + + + + +
        throws IOException {
+ +268 + + +1 + +1. serialize : removed call to com/fasterxml/jackson/core/JsonGenerator::writeString → KILLED
+ +
+
+
      gen.writeString(value.getBytes().getBase64Url());
+ +269 + + + + + + +
    }
+ +270 + + + + + + +
  }
+ +271 + + + + + + +
}

Mutations

102 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
103 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
104 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.AttestationObjectSpec
changed conditional boundary → KILLED

+
117 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AttestationObjectSpec
negated conditional → KILLED

+
123 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AttestationObjectSpec
negated conditional → KILLED

+
137 + + + +

1.1
Location : getRpIdHash
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorData::getRpIdHash → KILLED

+
142 + + + +

1.1
Location : getSignatureCounter
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
replaced long return with 0 for com/yubico/webauthn/data/AuthenticatorData::getSignatureCounter → KILLED

+
153 + + + +

1.1
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

2.2
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
changed conditional boundary → KILLED

3.3
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
172 + + + +

1.1
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
Replaced integer addition with subtraction → KILLED

+
177 + + + +

1.1
Location : parseAttestedCredentialData
Killed by : none
changed conditional boundary → SURVIVED

2.2
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

3.3
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
192 + + + +

1.1
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
changed conditional boundary → KILLED

2.2
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
193 + + + +

1.1
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
negated conditional → KILLED

+
206 + + + +

1.1
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
negated conditional → KILLED

+
214 + + + +

1.1
Location : parseAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorData::parseAttestedCredentialData → KILLED

+
226 + + + +

1.1
Location : parseExtensions
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorData::parseExtensions → KILLED

+
246 + + + +

1.1
Location : getAttestedCredentialData
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorData::getAttestedCredentialData → KILLED

+
259 + + + +

1.1
Location : getExtensions
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorData::getExtensions → KILLED

+
268 + + + +

1.1
Location : serialize
Killed by : com.yubico.webauthn.data.JsonIoSpec
removed call to com/fasterxml/jackson/core/JsonGenerator::writeString → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorDataFlags.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorDataFlags.java.html new file mode 100644 index 000000000..a0b5b3f2f --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorDataFlags.java.html @@ -0,0 +1,1910 @@ + + + + + + + + + +

AuthenticatorDataFlags.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import lombok.EqualsAndHashCode;
+ +30 + + + + + + +
import lombok.ToString;
+ +31 + + + + + + +
+ +32 + + + + + + +
/**
+ +33 + + + + + + +
 * The flags bit field of an authenticator data structure, decoded as a high-level object.
+ +34 + + + + + + +
 *
+ +35 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#flags">Table 1</a>
+ +36 + + + + + + +
 */
+ +37 + + + + + + +
@ToString
+ +38 + + + + + + +
@EqualsAndHashCode
+ +39 + + + + + + +
public final class AuthenticatorDataFlags {
+ +40 + + + + + + +
  public final byte value;
+ +41 + + + + + + +
+ +42 + + + + + + +
  /** User present */
+ +43 + + + + + + +
  public final boolean UP;
+ +44 + + + + + + +
+ +45 + + + + + + +
  /** User verified */
+ +46 + + + + + + +
  public final boolean UV;
+ +47 + + + + + + +
+ +48 + + + + + + +
  /**
+ +49 + + + + + + +
   * Backup eligible: the credential can and is allowed to be backed up.
+ +50 + + + + + + +
   *
+ +51 + + + + + + +
   * <p>NOTE that this is only a hint and not a guarantee, unless backed by a trusted authenticator
+ +52 + + + + + + +
   * attestation.
+ +53 + + + + + + +
   *
+ +54 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-be">§6.1. Authenticator Data</a>
+ +55 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +56 + + + + + + +
   *     the standard matures.
+ +57 + + + + + + +
   */
+ +58 + + + + + + +
  @Deprecated public final boolean BE;
+ +59 + + + + + + +
+ +60 + + + + + + +
  /**
+ +61 + + + + + + +
   * Backup status: the credential is currently backed up.
+ +62 + + + + + + +
   *
+ +63 + + + + + + +
   * <p>NOTE that this is only a hint and not a guarantee, unless backed by a trusted authenticator
+ +64 + + + + + + +
   * attestation.
+ +65 + + + + + + +
   *
+ +66 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">§6.1. Authenticator Data</a>
+ +67 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +68 + + + + + + +
   *     the standard matures.
+ +69 + + + + + + +
   */
+ +70 + + + + + + +
  @Deprecated public final boolean BS;
+ +71 + + + + + + +
+ +72 + + + + + + +
  /**
+ +73 + + + + + + +
   * Attested credential data present.
+ +74 + + + + + + +
   *
+ +75 + + + + + + +
   * <p>Users of this library should not need to inspect this value directly.
+ +76 + + + + + + +
   *
+ +77 + + + + + + +
   * @see AuthenticatorData#getAttestedCredentialData()
+ +78 + + + + + + +
   */
+ +79 + + + + + + +
  public final boolean AT;
+ +80 + + + + + + +
+ +81 + + + + + + +
  /**
+ +82 + + + + + + +
   * Extension data present.
+ +83 + + + + + + +
   *
+ +84 + + + + + + +
   * @see AuthenticatorData#getExtensions()
+ +85 + + + + + + +
   */
+ +86 + + + + + + +
  public final boolean ED;
+ +87 + + + + + + +
+ +88 + + + + + + +
  /** Decode an {@link AuthenticatorDataFlags} object from a raw bit field byte. */
+ +89 + + + + + + +
  @JsonCreator
+ +90 + + + + + + +
  public AuthenticatorDataFlags(@JsonProperty("value") byte value) {
+ +91 + + + + + + +
    this.value = value;
+ +92 + + + + + + +
+ +93 + + +2 + +1. <init> : Replaced bitwise AND with OR → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    UP = (value & Bitmasks.UP) != 0;
+ +94 + + +2 + +1. <init> : Replaced bitwise AND with OR → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    UV = (value & Bitmasks.UV) != 0;
+ +95 + + +2 + +1. <init> : Replaced bitwise AND with OR → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    BE = (value & Bitmasks.BE) != 0;
+ +96 + + +2 + +1. <init> : Replaced bitwise AND with OR → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    BS = (value & Bitmasks.BS) != 0;
+ +97 + + +2 + +1. <init> : Replaced bitwise AND with OR → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    AT = (value & Bitmasks.AT) != 0;
+ +98 + + +2 + +1. <init> : Replaced bitwise AND with OR → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    ED = (value & Bitmasks.ED) != 0;
+ +99 + + + + + + +
+ +100 + + +2 + +1. <init> : negated conditional → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    if (BS && !BE) {
+ +101 + + + + + + +
      throw new IllegalArgumentException(
+ +102 + + + + + + +
          String.format("Flag combination is invalid: BE=0, BS=1 in flags: 0x%02x", value));
+ +103 + + + + + + +
    }
+ +104 + + + + + + +
  }
+ +105 + + + + + + +
+ +106 + + + + + + +
  private static final class Bitmasks {
+ +107 + + + + + + +
    static final byte UP = 0x01;
+ +108 + + + + + + +
    static final byte UV = 0x04;
+ +109 + + + + + + +
    static final byte BE = 0x08;
+ +110 + + + + + + +
    static final byte BS = 0x10;
+ +111 + + + + + + +
    static final byte AT = 0x40;
+ +112 + + + + + + +
    static final byte ED = -0x80;
+ +113 + + + + + + +
+ +114 + + + + + + +
    /* Reserved bits */
+ +115 + + + + + + +
    // static final byte RFU1 = 0x02;
+ +116 + + + + + + +
    // static final byte RFU2 = 0x20;
+ +117 + + + + + + +
  }
+ +118 + + + + + + +
}

Mutations

93 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
Replaced bitwise AND with OR → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
negated conditional → KILLED

+
94 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
Replaced bitwise AND with OR → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
negated conditional → KILLED

+
95 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
Replaced bitwise AND with OR → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
negated conditional → KILLED

+
96 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
Replaced bitwise AND with OR → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
negated conditional → KILLED

+
97 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
Replaced bitwise AND with OR → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
negated conditional → KILLED

+
98 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
Replaced bitwise AND with OR → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
negated conditional → KILLED

+
100 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorDataFlagsSpec
negated conditional → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorRegistrationExtensionOutputs.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorRegistrationExtensionOutputs.java.html new file mode 100644 index 000000000..6bcd3904b --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorRegistrationExtensionOutputs.java.html @@ -0,0 +1,2290 @@ + + + + + + + + + +

AuthenticatorRegistrationExtensionOutputs.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +30 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +31 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +32 + + + + + + +
import java.util.HashSet;
+ +33 + + + + + + +
import java.util.List;
+ +34 + + + + + + +
import java.util.Optional;
+ +35 + + + + + + +
import java.util.Set;
+ +36 + + + + + + +
import lombok.Builder;
+ +37 + + + + + + +
import lombok.EqualsAndHashCode;
+ +38 + + + + + + +
import lombok.Value;
+ +39 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +40 + + + + + + +
+ +41 + + + + + + +
/**
+ +42 + + + + + + +
 * Contains <a
+ +43 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">authenticator
+ +44 + + + + + + +
 * extension outputs</a> from a <code>navigator.credentials.create()</code> operation.
+ +45 + + + + + + +
 *
+ +46 + + + + + + +
 * <p>Note that there is no guarantee that any extension input present in {@link
+ +47 + + + + + + +
 * RegistrationExtensionInputs} will have a corresponding output present here.
+ +48 + + + + + + +
 *
+ +49 + + + + + + +
 * <p>The values contained here are parsed from the {@link AuthenticatorData} structure.
+ +50 + + + + + + +
 *
+ +51 + + + + + + +
 * <p>The client extension outputs are represented by the {@link ClientRegistrationExtensionOutputs}
+ +52 + + + + + + +
 * type.
+ +53 + + + + + + +
 *
+ +54 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-extensions">§9. WebAuthn
+ +55 + + + + + + +
 *     Extensions</a>
+ +56 + + + + + + +
 */
+ +57 + + + + + + +
@Value
+ +58 + + + + + + +
@Builder(toBuilder = true)
+ +59 + + + + + + +
@Slf4j
+ +60 + + + + + + +
@JsonIgnoreProperties(ignoreUnknown = true)
+ +61 + + + + + + +
public final class AuthenticatorRegistrationExtensionOutputs
+ +62 + + + + + + +
    implements AuthenticatorExtensionOutputs {
+ +63 + + + + + + +
+ +64 + + + + + + +
  private final List<Extensions.Uvm.UvmEntry> uvm;
+ +65 + + + + + + +
+ +66 + + + + + + +
  @JsonCreator
+ +67 + + + + + + +
  private AuthenticatorRegistrationExtensionOutputs(
+ +68 + + + + + + +
      @JsonProperty("uvm") List<Extensions.Uvm.UvmEntry> uvm) {
+ +69 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    this.uvm = uvm == null ? null : CollectionUtil.immutableList(uvm);
+ +70 + + + + + + +
  }
+ +71 + + + + + + +
+ +72 + + + + + + +
  /**
+ +73 + + + + + + +
   * Parse <a
+ +74 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#registration-extension">registration</a>
+ +75 + + + + + + +
   * <a
+ +76 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">authenticator
+ +77 + + + + + + +
   * extension outputs</a> from the given authenticator data.
+ +78 + + + + + + +
   *
+ +79 + + + + + + +
   * <p>If the <code>authData</code> does not contain authenticator extension outputs, this returns
+ +80 + + + + + + +
   * an empty {@link Optional}.
+ +81 + + + + + + +
   *
+ +82 + + + + + + +
   * <p>Otherwise, this returns a present {@link Optional} containing an {@link
+ +83 + + + + + + +
   * AuthenticatorRegistrationExtensionOutputs} value with all validly-formatted <a
+ +84 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#registration-extension">registration</a>
+ +85 + + + + + + +
   * <a
+ +86 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">extension
+ +87 + + + + + + +
   * outputs</a> supported by this library. This silently ignores <a
+ +88 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authentication-extension">authentication</a>
+ +89 + + + + + + +
   * extension outputs, malformed extension outputs, and unsupported extensions. The raw set of
+ +90 + + + + + + +
   * extension outputs can instead be obtained via {@link AuthenticatorData#getExtensions()}.
+ +91 + + + + + + +
   *
+ +92 + + + + + + +
   * <p>Note that a present {@link AuthenticatorRegistrationExtensionOutputs} may contain zero
+ +93 + + + + + + +
   * extension outputs.
+ +94 + + + + + + +
   *
+ +95 + + + + + + +
   * @param authData the <a
+ +96 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-data">authenticator
+ +97 + + + + + + +
   *     data</a> to parse extension outputs from
+ +98 + + + + + + +
   * @return an empty {@link Optional} if the <code>authData</code> does not contain authenticator
+ +99 + + + + + + +
   *     extension outputs. Otherwise a present {@link Optional} containing parsed extension output
+ +100 + + + + + + +
   *     values.
+ +101 + + + + + + +
   */
+ +102 + + + + + + +
  public static Optional<AuthenticatorRegistrationExtensionOutputs> fromAuthenticatorData(
+ +103 + + + + + + +
      AuthenticatorData authData) {
+ +104 + + +1 + +1. fromAuthenticatorData : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::fromAuthenticatorData → KILLED
+ +
+
+
    return authData.getExtensions().flatMap(AuthenticatorRegistrationExtensionOutputs::fromCbor);
+ +105 + + + + + + +
  }
+ +106 + + + + + + +
+ +107 + + + + + + +
  static Optional<AuthenticatorRegistrationExtensionOutputs> fromCbor(CBORObject cbor) {
+ +108 + + + + + + +
    AuthenticatorRegistrationExtensionOutputsBuilder b = builder();
+ +109 + + + + + + +
+ +110 + + +1 + +1. fromCbor : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
    Extensions.Uvm.parseAuthenticatorExtensionOutput(cbor).ifPresent(b::uvm);
+ +111 + + + + + + +
+ +112 + + + + + + +
    AuthenticatorRegistrationExtensionOutputs result = b.build();
+ +113 + + + + + + +
+ +114 + + +1 + +1. fromCbor : negated conditional → KILLED
+ +
+
+
    if (result.getExtensionIds().isEmpty()) {
+ +115 + + + + + + +
      return Optional.empty();
+ +116 + + + + + + +
    } else {
+ +117 + + +1 + +1. fromCbor : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::fromCbor → KILLED
+ +
+
+
      return Optional.of(result);
+ +118 + + + + + + +
    }
+ +119 + + + + + + +
  }
+ +120 + + + + + + +
+ +121 + + + + + + +
  @Override
+ +122 + + + + + + +
  @EqualsAndHashCode.Include
+ +123 + + + + + + +
  public Set<String> getExtensionIds() {
+ +124 + + + + + + +
    HashSet<String> ids = new HashSet<>();
+ +125 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (uvm != null) {
+ +126 + + + + + + +
      ids.add(Extensions.Uvm.EXTENSION_ID);
+ +127 + + + + + + +
    }
+ +128 + + +1 + +1. getExtensionIds : replaced return value with Collections.emptySet for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::getExtensionIds → KILLED
+ +
+
+
    return ids;
+ +129 + + + + + + +
  }
+ +130 + + + + + + +
+ +131 + + + + + + +
  /**
+ +132 + + + + + + +
   * @return The <a
+ +133 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">authenticator
+ +134 + + + + + + +
   *     extension output</a> for the <a
+ +135 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">User
+ +136 + + + + + + +
   *     Verification Method (<code>uvm</code>) extension</a>, if any.
+ +137 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">§10.3.
+ +138 + + + + + + +
   *     User Verification Method extension (uvm)</a>
+ +139 + + + + + + +
   */
+ +140 + + + + + + +
  public Optional<List<Extensions.Uvm.UvmEntry>> getUvm() {
+ +141 + + +1 + +1. getUvm : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::getUvm → KILLED
+ +
+
+
    return Optional.ofNullable(uvm);
+ +142 + + + + + + +
  }
+ +143 + + + + + + +
}

Mutations

69 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
104 + + + +

1.1
Location : fromAuthenticatorData
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::fromAuthenticatorData → KILLED

+
110 + + + +

1.1
Location : fromCbor
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to java/util/Optional::ifPresent → KILLED

+
114 + + + +

1.1
Location : fromCbor
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
117 + + + +

1.1
Location : fromCbor
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::fromCbor → KILLED

+
125 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
128 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Collections.emptySet for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::getExtensionIds → KILLED

+
141 + + + +

1.1
Location : getUvm
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::getUvm → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorResponse.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorResponse.java.html new file mode 100644 index 000000000..2214a3064 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorResponse.java.html @@ -0,0 +1,1020 @@ + + + + + + + + + +

AuthenticatorResponse.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnore;
+ +28 + + + + + + +
+ +29 + + + + + + +
/**
+ +30 + + + + + + +
 * Authenticators respond to Relying Party requests by returning an object derived from the {@link
+ +31 + + + + + + +
 * AuthenticatorResponse} interface.
+ +32 + + + + + + +
 *
+ +33 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticatorresponse">§5.2.
+ +34 + + + + + + +
 *     Authenticator Responses (interface AuthenticatorResponse) </a>
+ +35 + + + + + + +
 */
+ +36 + + + + + + +
public interface AuthenticatorResponse {
+ +37 + + + + + + +
+ +38 + + + + + + +
  /**
+ +39 + + + + + + +
   * The authenticator data returned by the authenticator. See <a
+ +40 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-data">§6.1
+ +41 + + + + + + +
   * Authenticator Data</a>.
+ +42 + + + + + + +
   */
+ +43 + + + + + + +
  ByteArray getAuthenticatorData();
+ +44 + + + + + + +
+ +45 + + + + + + +
  /** {@link #getAuthenticatorData()} parsed as a domain object. */
+ +46 + + + + + + +
  @JsonIgnore
+ +47 + + + + + + +
  default AuthenticatorData getParsedAuthenticatorData() {
+ +48 + + +1 + +1. getParsedAuthenticatorData : replaced return value with null for com/yubico/webauthn/data/AuthenticatorResponse::getParsedAuthenticatorData → NO_COVERAGE
+ +
+
+
    return new AuthenticatorData(getAuthenticatorData());
+ +49 + + + + + + +
  }
+ +50 + + + + + + +
+ +51 + + + + + + +
  /**
+ +52 + + + + + + +
   * The JSON-serialized client data (see <a
+ +53 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictionary-client-data">§5.10.1
+ +54 + + + + + + +
   * Client Data Used in WebAuthn Signatures</a> (dictionary {@link CollectedClientData})) passed to
+ +55 + + + + + + +
   * the authenticator by the client in the call to either <code>navigator.credentials.create()
+ +56 + + + + + + +
   * </code> or <code>navigator.credentials.get()</code>. The exact JSON serialization MUST be
+ +57 + + + + + + +
   * preserved, as the hash of the serialized client data has been computed over it.
+ +58 + + + + + + +
   */
+ +59 + + + + + + +
  ByteArray getClientDataJSON();
+ +60 + + + + + + +
+ +61 + + + + + + +
  /** {@link #getClientDataJSON()} parsed as a domain object. */
+ +62 + + + + + + +
  @JsonIgnore
+ +63 + + + + + + +
  CollectedClientData getClientData();
+ +64 + + + + + + +
}

Mutations

48 + + + +

1.1
Location : getParsedAuthenticatorData
Killed by : none
replaced return value with null for com/yubico/webauthn/data/AuthenticatorResponse::getParsedAuthenticatorData → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorSelectionCriteria.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorSelectionCriteria.java.html new file mode 100644 index 000000000..bca3ce3ee --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorSelectionCriteria.java.html @@ -0,0 +1,3562 @@ + + + + + + + + + +

AuthenticatorSelectionCriteria.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import java.util.Optional;
+ +30 + + + + + + +
import lombok.Builder;
+ +31 + + + + + + +
import lombok.NonNull;
+ +32 + + + + + + +
import lombok.Value;
+ +33 + + + + + + +
+ +34 + + + + + + +
/**
+ +35 + + + + + + +
 * This class may be used to specify requirements regarding authenticator attributes.
+ +36 + + + + + + +
 *
+ +37 + + + + + + +
 * @see <a
+ +38 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-authenticatorselectioncriteria">§5.4.4.
+ +39 + + + + + + +
 *     Authenticator Selection Criteria (dictionary AuthenticatorSelectionCriteria) </a>
+ +40 + + + + + + +
 */
+ +41 + + + + + + +
@Value
+ +42 + + + + + + +
@Builder(toBuilder = true)
+ +43 + + + + + + +
public class AuthenticatorSelectionCriteria {
+ +44 + + + + + + +
+ +45 + + + + + + +
  /**
+ +46 + + + + + + +
   * If present, eligible authenticators are filtered to only authenticators attached with the
+ +47 + + + + + + +
   * specified <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-attachment">§5.4.5
+ +48 + + + + + + +
   * Authenticator Attachment Enumeration (enum AuthenticatorAttachment)</a>.
+ +49 + + + + + + +
   */
+ +50 + + + + + + +
  private final AuthenticatorAttachment authenticatorAttachment;
+ +51 + + + + + + +
+ +52 + + + + + + +
  /**
+ +53 + + + + + + +
   * Specifies the extent to which the Relying Party desires to create a client-side discoverable
+ +54 + + + + + + +
   * credential (passkey). For historical reasons the naming retains the deprecated “resident”
+ +55 + + + + + + +
   * terminology.
+ +56 + + + + + + +
   *
+ +57 + + + + + + +
   * <p>When this is set, {@link PublicKeyCredentialCreationOptions#toCredentialsCreateJson()} will
+ +58 + + + + + + +
   * also emit a <a
+ +59 + + + + + + +
   * href="https://www.w3.org/TR/webauthn-2/#dom-authenticatorselectioncriteria-requireresidentkey">
+ +60 + + + + + + +
   * <code>requireResidentKey</code></a> member for backwards compatibility with WebAuthn Level 1.
+ +61 + + + + + + +
   * It will be set to <code>true</code> if this is set to {@link ResidentKeyRequirement#REQUIRED
+ +62 + + + + + + +
   * REQUIRED} and <code>false</code> if this is set to anything else. When this is not set, a
+ +63 + + + + + + +
   * <code>requireResidentKey</code> member will not be emitted.
+ +64 + + + + + + +
   *
+ +65 + + + + + + +
   * <p>When not set, the default in the browser is {@link ResidentKeyRequirement#DISCOURAGED}.
+ +66 + + + + + + +
   *
+ +67 + + + + + + +
   * <p>By default, this is not set.
+ +68 + + + + + + +
   *
+ +69 + + + + + + +
   * @see ResidentKeyRequirement
+ +70 + + + + + + +
   * @see <a
+ +71 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-residentKeyRequirement">§5.4.6.
+ +72 + + + + + + +
   *     Resident Key Requirement Enumeration (enum ResidentKeyRequirement)</a>
+ +73 + + + + + + +
   * @see <a
+ +74 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-credential">Client-side
+ +75 + + + + + + +
   *     discoverable Credential</a>
+ +76 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +77 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +78 + + + + + + +
   */
+ +79 + + + + + + +
  private final ResidentKeyRequirement residentKey;
+ +80 + + + + + + +
+ +81 + + + + + + +
  /**
+ +82 + + + + + + +
   * Describes the Relying Party's requirements regarding <a
+ +83 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-verification">user
+ +84 + + + + + + +
   * verification</a> for the <code>navigator.credentials.create()</code> operation. Eligible
+ +85 + + + + + + +
   * authenticators are filtered to only those capable of satisfying this requirement.
+ +86 + + + + + + +
   *
+ +87 + + + + + + +
   * <p>By default, this is not set. When not set, the default in the browser is {@link
+ +88 + + + + + + +
   * UserVerificationRequirement#PREFERRED}.
+ +89 + + + + + + +
   *
+ +90 + + + + + + +
   * @see UserVerificationRequirement
+ +91 + + + + + + +
   * @see <a
+ +92 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-userVerificationRequirement">§5.8.6.
+ +93 + + + + + + +
   *     User Verification Requirement Enumeration (enum UserVerificationRequirement)</a>
+ +94 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-verification">User
+ +95 + + + + + + +
   *     Verification</a>
+ +96 + + + + + + +
   */
+ +97 + + + + + + +
  private UserVerificationRequirement userVerification;
+ +98 + + + + + + +
+ +99 + + + + + + +
  /**
+ +100 + + + + + + +
   * If present, eligible authenticators are filtered to only authenticators attached with the
+ +101 + + + + + + +
   * specified <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-attachment">§5.4.5
+ +102 + + + + + + +
   * Authenticator Attachment Enumeration (enum AuthenticatorAttachment)</a>.
+ +103 + + + + + + +
   */
+ +104 + + + + + + +
  public Optional<AuthenticatorAttachment> getAuthenticatorAttachment() {
+ +105 + + +1 + +1. getAuthenticatorAttachment : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getAuthenticatorAttachment → KILLED
+ +
+
+
    return Optional.ofNullable(authenticatorAttachment);
+ +106 + + + + + + +
  }
+ +107 + + + + + + +
+ +108 + + + + + + +
  /**
+ +109 + + + + + + +
   * Specifies the extent to which the Relying Party desires to create a client-side discoverable
+ +110 + + + + + + +
   * credential (passkey). For historical reasons the naming retains the deprecated “resident”
+ +111 + + + + + + +
   * terminology.
+ +112 + + + + + + +
   *
+ +113 + + + + + + +
   * <p>When this is set, {@link PublicKeyCredentialCreationOptions#toCredentialsCreateJson()} will
+ +114 + + + + + + +
   * also emit a <a
+ +115 + + + + + + +
   * href="https://www.w3.org/TR/webauthn-2/#dom-authenticatorselectioncriteria-requireresidentkey">
+ +116 + + + + + + +
   * <code>requireResidentKey</code></a> member for backwards compatibility with WebAuthn Level 1.
+ +117 + + + + + + +
   * It will be set to <code>true</code> if this is set to {@link ResidentKeyRequirement#REQUIRED
+ +118 + + + + + + +
   * REQUIRED} and <code>false</code> if this is set to anything else. When this is not set, a
+ +119 + + + + + + +
   * <code>requireResidentKey</code> member will not be emitted.
+ +120 + + + + + + +
   *
+ +121 + + + + + + +
   * <p>When not set, the default in the browser is {@link ResidentKeyRequirement#DISCOURAGED}.
+ +122 + + + + + + +
   *
+ +123 + + + + + + +
   * <p>By default, this is not set.
+ +124 + + + + + + +
   *
+ +125 + + + + + + +
   * @see ResidentKeyRequirement
+ +126 + + + + + + +
   * @see <a
+ +127 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-residentKeyRequirement">§5.4.6.
+ +128 + + + + + + +
   *     Resident Key Requirement Enumeration (enum ResidentKeyRequirement)</a>
+ +129 + + + + + + +
   * @see <a
+ +130 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-credential">Client-side
+ +131 + + + + + + +
   *     discoverable Credential</a>
+ +132 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +133 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +134 + + + + + + +
   */
+ +135 + + + + + + +
  public Optional<ResidentKeyRequirement> getResidentKey() {
+ +136 + + +1 + +1. getResidentKey : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getResidentKey → KILLED
+ +
+
+
    return Optional.ofNullable(residentKey);
+ +137 + + + + + + +
  }
+ +138 + + + + + + +
+ +139 + + + + + + +
  /**
+ +140 + + + + + + +
   * For backwards compatibility with <code>requireResidentKey</code>.
+ +141 + + + + + + +
   *
+ +142 + + + + + + +
   * @see <a
+ +143 + + + + + + +
   *     href="https://www.w3.org/TR/webauthn-2/#dom-authenticatorselectioncriteria-requireresidentkey">5.4.4.
+ +144 + + + + + + +
   *     Authenticator Selection Criteria (dictionary AuthenticatorSelectionCriteria) member
+ +145 + + + + + + +
   *     requireResidentKey</a>
+ +146 + + + + + + +
   */
+ +147 + + + + + + +
  @JsonProperty
+ +148 + + + + + + +
  private Boolean isRequireResidentKey() {
+ +149 + + +4 + +1. lambda$isRequireResidentKey$0 : negated conditional → KILLED
+2. isRequireResidentKey : replaced Boolean return with False for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::isRequireResidentKey → KILLED
+3. lambda$isRequireResidentKey$0 : replaced Boolean return with True for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::lambda$isRequireResidentKey$0 → KILLED
+4. isRequireResidentKey : replaced Boolean return with True for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::isRequireResidentKey → KILLED
+ +
+
+
    return getResidentKey().map(rk -> rk == ResidentKeyRequirement.REQUIRED).orElse(null);
+ +150 + + + + + + +
  }
+ +151 + + + + + + +
+ +152 + + + + + + +
  /**
+ +153 + + + + + + +
   * Describes the Relying Party's requirements regarding <a
+ +154 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-verification">user
+ +155 + + + + + + +
   * verification</a> for the <code>navigator.credentials.create()</code> operation. Eligible
+ +156 + + + + + + +
   * authenticators are filtered to only those capable of satisfying this requirement.
+ +157 + + + + + + +
   *
+ +158 + + + + + + +
   * <p>By default, this is not set. When not set, the default in the browser is {@link
+ +159 + + + + + + +
   * UserVerificationRequirement#PREFERRED}.
+ +160 + + + + + + +
   *
+ +161 + + + + + + +
   * @see UserVerificationRequirement
+ +162 + + + + + + +
   * @see <a
+ +163 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-userVerificationRequirement">§5.8.6.
+ +164 + + + + + + +
   *     User Verification Requirement Enumeration (enum UserVerificationRequirement)</a>
+ +165 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-verification">User
+ +166 + + + + + + +
   *     Verification</a>
+ +167 + + + + + + +
   */
+ +168 + + + + + + +
  public Optional<UserVerificationRequirement> getUserVerification() {
+ +169 + + +1 + +1. getUserVerification : replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getUserVerification → KILLED
+ +
+
+
    return Optional.ofNullable(userVerification);
+ +170 + + + + + + +
  }
+ +171 + + + + + + +
+ +172 + + + + + + +
  @JsonCreator
+ +173 + + + + + + +
  private AuthenticatorSelectionCriteria(
+ +174 + + + + + + +
      @JsonProperty("authenticatorAttachment") AuthenticatorAttachment authenticatorAttachment,
+ +175 + + + + + + +
      @JsonProperty("requireResidentKey") Boolean requireResidentKey,
+ +176 + + + + + + +
      @JsonProperty("residentKey") ResidentKeyRequirement residentKey,
+ +177 + + + + + + +
      @JsonProperty("userVerification") UserVerificationRequirement userVerification) {
+ +178 + + + + + + +
    this.authenticatorAttachment = authenticatorAttachment;
+ +179 + + + + + + +
+ +180 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    if (residentKey != null) {
+ +181 + + + + + + +
      this.residentKey = residentKey;
+ +182 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    } else if (requireResidentKey != null) {
+ +183 + + + + + + +
      this.residentKey =
+ +184 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
          requireResidentKey ? ResidentKeyRequirement.REQUIRED : ResidentKeyRequirement.DISCOURAGED;
+ +185 + + + + + + +
    } else {
+ +186 + + + + + + +
      this.residentKey = null;
+ +187 + + + + + + +
    }
+ +188 + + + + + + +
+ +189 + + + + + + +
    this.userVerification = userVerification;
+ +190 + + + + + + +
  }
+ +191 + + + + + + +
+ +192 + + + + + + +
  /** For use by the builder. */
+ +193 + + + + + + +
  private AuthenticatorSelectionCriteria(
+ +194 + + + + + + +
      AuthenticatorAttachment authenticatorAttachment,
+ +195 + + + + + + +
      ResidentKeyRequirement residentKey,
+ +196 + + + + + + +
      UserVerificationRequirement userVerification) {
+ +197 + + + + + + +
    this(authenticatorAttachment, null, residentKey, userVerification);
+ +198 + + + + + + +
  }
+ +199 + + + + + + +
+ +200 + + + + + + +
  public static class AuthenticatorSelectionCriteriaBuilder {
+ +201 + + + + + + +
    private AuthenticatorAttachment authenticatorAttachment = null;
+ +202 + + + + + + +
+ +203 + + + + + + +
    /**
+ +204 + + + + + + +
     * If present, eligible authenticators are filtered to only authenticators attached with the
+ +205 + + + + + + +
     * specified <a
+ +206 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-attachment">§5.4.5
+ +207 + + + + + + +
     * Authenticator Attachment Enumeration (enum AuthenticatorAttachment)</a>.
+ +208 + + + + + + +
     */
+ +209 + + + + + + +
    public AuthenticatorSelectionCriteriaBuilder authenticatorAttachment(
+ +210 + + +1 + +1. authenticatorAttachment : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<AuthenticatorAttachment> authenticatorAttachment) {
+ +211 + + +1 + +1. authenticatorAttachment : replaced return value with null for com/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder::authenticatorAttachment → KILLED
+ +
+
+
      return this.authenticatorAttachment(authenticatorAttachment.orElse(null));
+ +212 + + + + + + +
    }
+ +213 + + + + + + +
+ +214 + + + + + + +
    /**
+ +215 + + + + + + +
     * If present, eligible authenticators are filtered to only authenticators attached with the
+ +216 + + + + + + +
     * specified <a
+ +217 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-attachment">§5.4.5
+ +218 + + + + + + +
     * Authenticator Attachment Enumeration (enum AuthenticatorAttachment)</a>.
+ +219 + + + + + + +
     */
+ +220 + + + + + + +
    public AuthenticatorSelectionCriteriaBuilder authenticatorAttachment(
+ +221 + + + + + + +
        AuthenticatorAttachment authenticatorAttachment) {
+ +222 + + + + + + +
      this.authenticatorAttachment = authenticatorAttachment;
+ +223 + + +1 + +1. authenticatorAttachment : replaced return value with null for com/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder::authenticatorAttachment → KILLED
+ +
+
+
      return this;
+ +224 + + + + + + +
    }
+ +225 + + + + + + +
  }
+ +226 + + + + + + +
}

Mutations

105 + + + +

1.1
Location : getAuthenticatorAttachment
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getAuthenticatorAttachment → KILLED

+
136 + + + +

1.1
Location : getResidentKey
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getResidentKey → KILLED

+
149 + + + +

1.1
Location : lambda$isRequireResidentKey$0
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

2.2
Location : isRequireResidentKey
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced Boolean return with False for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::isRequireResidentKey → KILLED

3.3
Location : lambda$isRequireResidentKey$0
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced Boolean return with True for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::lambda$isRequireResidentKey$0 → KILLED

4.4
Location : isRequireResidentKey
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced Boolean return with True for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::isRequireResidentKey → KILLED

+
169 + + + +

1.1
Location : getUserVerification
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getUserVerification → KILLED

+
180 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
negated conditional → KILLED

+
182 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
negated conditional → KILLED

+
184 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
negated conditional → KILLED

+
210 + + + +

1.1
Location : authenticatorAttachment
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
negated conditional → KILLED

+
211 + + + +

1.1
Location : authenticatorAttachment
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
replaced return value with null for com/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder::authenticatorAttachment → KILLED

+
223 + + + +

1.1
Location : authenticatorAttachment
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
replaced return value with null for com/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder::authenticatorAttachment → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorTransport.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorTransport.java.html new file mode 100644 index 000000000..89693411b --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/AuthenticatorTransport.java.html @@ -0,0 +1,2612 @@ + + + + + + + + + +

AuthenticatorTransport.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +29 + + + + + + +
import java.util.stream.Stream;
+ +30 + + + + + + +
import lombok.AccessLevel;
+ +31 + + + + + + +
import lombok.AllArgsConstructor;
+ +32 + + + + + + +
import lombok.NonNull;
+ +33 + + + + + + +
import lombok.Value;
+ +34 + + + + + + +
+ +35 + + + + + + +
/**
+ +36 + + + + + + +
 * Authenticators may communicate with Clients using a variety of transports. This enumeration
+ +37 + + + + + + +
 * defines a hint as to how Clients might communicate with a particular Authenticator in order to
+ +38 + + + + + + +
 * obtain an assertion for a specific credential. Note that these hints represent the Relying
+ +39 + + + + + + +
 * Party's best belief as to how an Authenticator may be reached. A Relying Party may obtain a list
+ +40 + + + + + + +
 * of transports hints from some attestation statement formats or via some out-of-band mechanism; it
+ +41 + + + + + + +
 * is outside the scope of this specification to define that mechanism.
+ +42 + + + + + + +
 *
+ +43 + + + + + + +
 * <p>Authenticators may implement various transports for communicating with clients. This
+ +44 + + + + + + +
 * enumeration defines hints as to how clients might communicate with a particular authenticator in
+ +45 + + + + + + +
 * order to obtain an assertion for a specific credential. Note that these hints represent the
+ +46 + + + + + + +
 * WebAuthn Relying Party's best belief as to how an authenticator may be reached. A Relying Party
+ +47 + + + + + + +
 * may obtain a list of transports hints from some attestation statement formats or via some
+ +48 + + + + + + +
 * out-of-band mechanism; it is outside the scope of the Web Authentication specification to define
+ +49 + + + + + + +
 * that mechanism.
+ +50 + + + + + + +
 *
+ +51 + + + + + + +
 * @see <a
+ +52 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enumdef-authenticatortransport">§5.10.4.
+ +53 + + + + + + +
 *     Authenticator Transport Enumeration (enum AuthenticatorTransport)</a>
+ +54 + + + + + + +
 */
+ +55 + + + + + + +
@Value
+ +56 + + + + + + +
@AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +57 + + + + + + +
public class AuthenticatorTransport implements Comparable<AuthenticatorTransport> {
+ +58 + + + + + + +
+ +59 + + + + + + +
  @JsonValue @NonNull private final String id;
+ +60 + + + + + + +
+ +61 + + + + + + +
  /**
+ +62 + + + + + + +
   * Indicates the respective authenticator can be contacted over removable USB.
+ +63 + + + + + + +
   *
+ +64 + + + + + + +
   * @see <a
+ +65 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticatortransport-usb">5.8.4.
+ +66 + + + + + + +
   *     Authenticator Transport Enumeration (enum AuthenticatorTransport)</a>
+ +67 + + + + + + +
   */
+ +68 + + + + + + +
  public static final AuthenticatorTransport USB = new AuthenticatorTransport("usb");
+ +69 + + + + + + +
+ +70 + + + + + + +
  /**
+ +71 + + + + + + +
   * Indicates the respective authenticator can be contacted over Near Field Communication (NFC).
+ +72 + + + + + + +
   *
+ +73 + + + + + + +
   * @see <a
+ +74 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticatortransport-nfc">5.8.4.
+ +75 + + + + + + +
   *     Authenticator Transport Enumeration (enum AuthenticatorTransport)</a>
+ +76 + + + + + + +
   */
+ +77 + + + + + + +
  public static final AuthenticatorTransport NFC = new AuthenticatorTransport("nfc");
+ +78 + + + + + + +
+ +79 + + + + + + +
  /**
+ +80 + + + + + + +
   * Indicates the respective authenticator can be contacted over Bluetooth Smart (Bluetooth Low
+ +81 + + + + + + +
   * Energy / BLE).
+ +82 + + + + + + +
   *
+ +83 + + + + + + +
   * @see <a
+ +84 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticatortransport-ble">5.8.4.
+ +85 + + + + + + +
   *     Authenticator Transport Enumeration (enum AuthenticatorTransport)</a>
+ +86 + + + + + + +
   */
+ +87 + + + + + + +
  public static final AuthenticatorTransport BLE = new AuthenticatorTransport("ble");
+ +88 + + + + + + +
+ +89 + + + + + + +
  /**
+ +90 + + + + + + +
   * Indicates the respective authenticator can be contacted using a combination of (often separate)
+ +91 + + + + + + +
   * data-transport and proximity mechanisms. This supports, for example, authentication on a
+ +92 + + + + + + +
   * desktop computer using a smartphone.
+ +93 + + + + + + +
   *
+ +94 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +95 + + + + + + +
   *     the standard matures.
+ +96 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#dom-authenticatortransport-hybrid">5.8.4.
+ +97 + + + + + + +
   *     Authenticator Transport Enumeration (enum AuthenticatorTransport)</a>
+ +98 + + + + + + +
   */
+ +99 + + + + + + +
  @Deprecated
+ +100 + + + + + + +
  public static final AuthenticatorTransport HYBRID = new AuthenticatorTransport("hybrid");
+ +101 + + + + + + +
+ +102 + + + + + + +
  /**
+ +103 + + + + + + +
   * Indicates the respective authenticator is contacted using a client device-specific transport.
+ +104 + + + + + + +
   * These authenticators are not removable from the client device.
+ +105 + + + + + + +
   *
+ +106 + + + + + + +
   * @see <a
+ +107 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticatortransport-internal">5.8.4.
+ +108 + + + + + + +
   *     Authenticator Transport Enumeration (enum AuthenticatorTransport)</a>
+ +109 + + + + + + +
   */
+ +110 + + + + + + +
  public static final AuthenticatorTransport INTERNAL = new AuthenticatorTransport("internal");
+ +111 + + + + + + +
+ +112 + + + + + + +
  /**
+ +113 + + + + + + +
   * @return An array containing all predefined values of {@link AuthenticatorTransport} known by
+ +114 + + + + + + +
   *     this implementation.
+ +115 + + + + + + +
   */
+ +116 + + + + + + +
  public static AuthenticatorTransport[] values() {
+ +117 + + +1 + +1. values : replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::values → KILLED
+ +
+
+
    return new AuthenticatorTransport[] {USB, NFC, BLE, HYBRID, INTERNAL};
+ +118 + + + + + + +
  }
+ +119 + + + + + + +
+ +120 + + + + + + +
  /**
+ +121 + + + + + + +
   * @return If <code>id</code> is the same as that of any of {@link #USB}, {@link #NFC}, {@link
+ +122 + + + + + + +
   *     #BLE}, {@link #HYBRID} or {@link #INTERNAL}, returns that constant instance. Otherwise
+ +123 + + + + + + +
   *     returns a new instance containing <code>id</code>.
+ +124 + + + + + + +
   * @see #valueOf(String)
+ +125 + + + + + + +
   */
+ +126 + + + + + + +
  @JsonCreator
+ +127 + + +1 + +1. of : negated conditional → KILLED
+ +
+
+
  public static AuthenticatorTransport of(@NonNull String id) {
+ +128 + + +1 + +1. of : replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::of → KILLED
+ +
+
+
    return Stream.of(values())
+ +129 + + +2 + +1. lambda$of$0 : replaced boolean return with false for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$0 → KILLED
+2. lambda$of$0 : replaced boolean return with true for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$0 → KILLED
+ +
+
+
        .filter(v -> v.getId().equals(id))
+ +130 + + + + + + +
        .findAny()
+ +131 + + +1 + +1. lambda$of$1 : replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$1 → KILLED
+ +
+
+
        .orElseGet(() -> new AuthenticatorTransport(id));
+ +132 + + + + + + +
  }
+ +133 + + + + + + +
+ +134 + + + + + + +
  /**
+ +135 + + + + + + +
   * @return If <code>name</code> equals <code>"USB"</code>, <code>"NFC"</code>, <code>"BLE"</code>,
+ +136 + + + + + + +
   *     <code>"HYBRID"</code> or <code>"INTERNAL"</code>, returns the constant by that name.
+ +137 + + + + + + +
   * @throws IllegalArgumentException if <code>name</code> is anything else.
+ +138 + + + + + + +
   * @see #of(String)
+ +139 + + + + + + +
   */
+ +140 + + + + + + +
  public static AuthenticatorTransport valueOf(String name) {
+ +141 + + + + + + +
    switch (name) {
+ +142 + + + + + + +
      case "USB":
+ +143 + + +1 + +1. valueOf : replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED
+ +
+
+
        return USB;
+ +144 + + + + + + +
      case "NFC":
+ +145 + + +1 + +1. valueOf : replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED
+ +
+
+
        return NFC;
+ +146 + + + + + + +
      case "BLE":
+ +147 + + +1 + +1. valueOf : replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED
+ +
+
+
        return BLE;
+ +148 + + + + + + +
      case "HYBRID":
+ +149 + + +1 + +1. valueOf : replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED
+ +
+
+
        return HYBRID;
+ +150 + + + + + + +
      case "INTERNAL":
+ +151 + + +1 + +1. valueOf : replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED
+ +
+
+
        return INTERNAL;
+ +152 + + + + + + +
      default:
+ +153 + + + + + + +
        throw new IllegalArgumentException(
+ +154 + + + + + + +
            "No constant com.yubico.webauthn.data.AuthenticatorTransport." + name);
+ +155 + + + + + + +
    }
+ +156 + + + + + + +
  }
+ +157 + + + + + + +
+ +158 + + + + + + +
  @Override
+ +159 + + + + + + +
  public int compareTo(AuthenticatorTransport other) {
+ +160 + + +1 + +1. compareTo : replaced int return with 0 for com/yubico/webauthn/data/AuthenticatorTransport::compareTo → KILLED
+ +
+
+
    return id.compareTo(other.id);
+ +161 + + + + + + +
  }
+ +162 + + + + + + +
}

Mutations

117 + + + +

1.1
Location : values
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::values → KILLED

+
127 + + + +

1.1
Location : of
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
negated conditional → KILLED

+
128 + + + +

1.1
Location : of
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::of → KILLED

+
129 + + + +

1.1
Location : lambda$of$0
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced boolean return with false for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$0 → KILLED

2.2
Location : lambda$of$0
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced boolean return with true for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$0 → KILLED

+
131 + + + +

1.1
Location : lambda$of$1
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$1 → KILLED

+
143 + + + +

1.1
Location : valueOf
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED

+
145 + + + +

1.1
Location : valueOf
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED

+
147 + + + +

1.1
Location : valueOf
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED

+
149 + + + +

1.1
Location : valueOf
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED

+
151 + + + +

1.1
Location : valueOf
Killed by : com.yubico.webauthn.data.AuthenticatorTransportSpec
replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf → KILLED

+
160 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced int return with 0 for com/yubico/webauthn/data/AuthenticatorTransport::compareTo → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ByteArray.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ByteArray.java.html new file mode 100644 index 000000000..42fa217f9 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ByteArray.java.html @@ -0,0 +1,2618 @@ + + + + + + + + + +

ByteArray.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +29 + + + + + + +
import com.google.common.primitives.Bytes;
+ +30 + + + + + + +
import com.yubico.internal.util.BinaryUtil;
+ +31 + + + + + + +
import com.yubico.webauthn.data.exception.Base64UrlException;
+ +32 + + + + + + +
import com.yubico.webauthn.data.exception.HexException;
+ +33 + + + + + + +
import java.util.Base64;
+ +34 + + + + + + +
import lombok.EqualsAndHashCode;
+ +35 + + + + + + +
import lombok.NonNull;
+ +36 + + + + + + +
import lombok.ToString;
+ +37 + + + + + + +
+ +38 + + + + + + +
/** An immutable byte array with support for encoding/decoding to/from various encodings. */
+ +39 + + + + + + +
@EqualsAndHashCode
+ +40 + + + + + + +
@ToString(includeFieldNames = false, onlyExplicitlyIncluded = true)
+ +41 + + + + + + +
public final class ByteArray implements Comparable<ByteArray> {
+ +42 + + + + + + +
+ +43 + + + + + + +
  private static final Base64.Encoder BASE64_ENCODER = Base64.getEncoder();
+ +44 + + + + + + +
  private static final Base64.Decoder BASE64_DECODER = Base64.getDecoder();
+ +45 + + + + + + +
+ +46 + + + + + + +
  private static final Base64.Encoder BASE64URL_ENCODER = Base64.getUrlEncoder().withoutPadding();
+ +47 + + + + + + +
  private static final Base64.Decoder BASE64URL_DECODER = Base64.getUrlDecoder();
+ +48 + + + + + + +
+ +49 + + + + + + +
  @NonNull private final byte[] bytes;
+ +50 + + + + + + +
+ +51 + + + + + + +
  @JsonValue @NonNull private final String base64url;
+ +52 + + + + + + +
+ +53 + + + + + + +
  /** Create a new instance by copying the contents of <code>bytes</code>. */
+ +54 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
  public ByteArray(@NonNull byte[] bytes) {
+ +55 + + + + + + +
    this.bytes = BinaryUtil.copy(bytes);
+ +56 + + + + + + +
    this.base64url = BASE64URL_ENCODER.encodeToString(this.bytes);
+ +57 + + + + + + +
  }
+ +58 + + + + + + +
+ +59 + + + + + + +
  private ByteArray(String base64url) throws Base64UrlException {
+ +60 + + + + + + +
    try {
+ +61 + + + + + + +
      this.bytes = BASE64URL_DECODER.decode(base64url);
+ +62 + + + + + + +
    } catch (IllegalArgumentException e) {
+ +63 + + + + + + +
      throw new Base64UrlException("Invalid Base64Url encoding: " + base64url, e);
+ +64 + + + + + + +
    }
+ +65 + + + + + + +
    this.base64url = base64url;
+ +66 + + + + + + +
  }
+ +67 + + + + + + +
+ +68 + + + + + + +
  /** Create a new instance by decoding <code>base64</code> as classic Base64 data. */
+ +69 + + +1 + +1. fromBase64 : negated conditional → KILLED
+ +
+
+
  public static ByteArray fromBase64(@NonNull final String base64) {
+ +70 + + +1 + +1. fromBase64 : replaced return value with null for com/yubico/webauthn/data/ByteArray::fromBase64 → KILLED
+ +
+
+
    return new ByteArray(BASE64_DECODER.decode(base64));
+ +71 + + + + + + +
  }
+ +72 + + + + + + +
+ +73 + + + + + + +
  /**
+ +74 + + + + + + +
   * Create a new instance by decoding <code>base64url</code> as Base64Url data.
+ +75 + + + + + + +
   *
+ +76 + + + + + + +
   * @throws Base64UrlException if <code>base64url</code> is not valid Base64Url data.
+ +77 + + + + + + +
   */
+ +78 + + + + + + +
  @JsonCreator
+ +79 + + +1 + +1. fromBase64Url : negated conditional → KILLED
+ +
+
+
  public static ByteArray fromBase64Url(@NonNull final String base64url) throws Base64UrlException {
+ +80 + + +1 + +1. fromBase64Url : replaced return value with null for com/yubico/webauthn/data/ByteArray::fromBase64Url → KILLED
+ +
+
+
    return new ByteArray(base64url.split("=")[0]);
+ +81 + + + + + + +
  }
+ +82 + + + + + + +
+ +83 + + + + + + +
  /**
+ +84 + + + + + + +
   * Create a new instance by decoding <code>hex</code> as hexadecimal data.
+ +85 + + + + + + +
   *
+ +86 + + + + + + +
   * @throws HexException if <code>hex</code> is not valid hexadecimal data.
+ +87 + + + + + + +
   */
+ +88 + + +1 + +1. fromHex : negated conditional → KILLED
+ +
+
+
  public static ByteArray fromHex(@NonNull final String hex) throws HexException {
+ +89 + + + + + + +
    try {
+ +90 + + +1 + +1. fromHex : replaced return value with null for com/yubico/webauthn/data/ByteArray::fromHex → KILLED
+ +
+
+
      return new ByteArray(BinaryUtil.fromHex(hex));
+ +91 + + + + + + +
    } catch (Exception e) {
+ +92 + + + + + + +
      throw new HexException("Invalid hexadecimal encoding: " + hex, e);
+ +93 + + + + + + +
    }
+ +94 + + + + + + +
  }
+ +95 + + + + + + +
+ +96 + + + + + + +
  /**
+ +97 + + + + + + +
   * @return a new instance containing a copy of this instance followed by a copy of <code>tail
+ +98 + + + + + + +
   *     </code>.
+ +99 + + + + + + +
   */
+ +100 + + +1 + +1. concat : negated conditional → KILLED
+ +
+
+
  public ByteArray concat(@NonNull ByteArray tail) {
+ +101 + + +1 + +1. concat : replaced return value with null for com/yubico/webauthn/data/ByteArray::concat → KILLED
+ +
+
+
    return new ByteArray(Bytes.concat(this.bytes, tail.bytes));
+ +102 + + + + + + +
  }
+ +103 + + + + + + +
+ +104 + + + + + + +
  public boolean isEmpty() {
+ +105 + + +2 + +1. isEmpty : negated conditional → KILLED
+2. isEmpty : replaced boolean return with true for com/yubico/webauthn/data/ByteArray::isEmpty → KILLED
+ +
+
+
    return size() == 0;
+ +106 + + + + + + +
  }
+ +107 + + + + + + +
+ +108 + + + + + + +
  public int size() {
+ +109 + + +1 + +1. size : replaced int return with 0 for com/yubico/webauthn/data/ByteArray::size → KILLED
+ +
+
+
    return this.bytes.length;
+ +110 + + + + + + +
  }
+ +111 + + + + + + +
+ +112 + + + + + + +
  /**
+ +113 + + + + + + +
   * @return a copy of the raw byte contents.
+ +114 + + + + + + +
   */
+ +115 + + + + + + +
  public byte[] getBytes() {
+ +116 + + +1 + +1. getBytes : replaced return value with null for com/yubico/webauthn/data/ByteArray::getBytes → KILLED
+ +
+
+
    return BinaryUtil.copy(bytes);
+ +117 + + + + + + +
  }
+ +118 + + + + + + +
+ +119 + + + + + + +
  /**
+ +120 + + + + + + +
   * @return the content bytes encoded as classic Base64 data.
+ +121 + + + + + + +
   */
+ +122 + + + + + + +
  public String getBase64() {
+ +123 + + +1 + +1. getBase64 : replaced return value with "" for com/yubico/webauthn/data/ByteArray::getBase64 → KILLED
+ +
+
+
    return BASE64_ENCODER.encodeToString(bytes);
+ +124 + + + + + + +
  }
+ +125 + + + + + + +
+ +126 + + + + + + +
  /**
+ +127 + + + + + + +
   * @return the content bytes encoded as Base64Url data, without padding.
+ +128 + + + + + + +
   */
+ +129 + + + + + + +
  public String getBase64Url() {
+ +130 + + +1 + +1. getBase64Url : replaced return value with "" for com/yubico/webauthn/data/ByteArray::getBase64Url → KILLED
+ +
+
+
    return base64url;
+ +131 + + + + + + +
  }
+ +132 + + + + + + +
+ +133 + + + + + + +
  /**
+ +134 + + + + + + +
   * @return the content bytes encoded as hexadecimal data.
+ +135 + + + + + + +
   */
+ +136 + + + + + + +
  @ToString.Include
+ +137 + + + + + + +
  public String getHex() {
+ +138 + + +1 + +1. getHex : replaced return value with "" for com/yubico/webauthn/data/ByteArray::getHex → KILLED
+ +
+
+
    return BinaryUtil.toHex(bytes);
+ +139 + + + + + + +
  }
+ +140 + + + + + + +
+ +141 + + + + + + +
  @Override
+ +142 + + + + + + +
  public int compareTo(ByteArray other) {
+ +143 + + +1 + +1. compareTo : negated conditional → KILLED
+ +
+
+
    if (bytes.length != other.bytes.length) {
+ +144 + + +2 + +1. compareTo : Replaced integer subtraction with addition → KILLED
+2. compareTo : replaced int return with 0 for com/yubico/webauthn/data/ByteArray::compareTo → KILLED
+ +
+
+
      return bytes.length - other.bytes.length;
+ +145 + + + + + + +
    }
+ +146 + + + + + + +
+ +147 + + +2 + +1. compareTo : changed conditional boundary → KILLED
+2. compareTo : negated conditional → KILLED
+ +
+
+
    for (int i = 0; i < bytes.length; ++i) {
+ +148 + + +1 + +1. compareTo : negated conditional → KILLED
+ +
+
+
      if (bytes[i] != other.bytes[i]) {
+ +149 + + +2 + +1. compareTo : Replaced integer subtraction with addition → KILLED
+2. compareTo : replaced int return with 0 for com/yubico/webauthn/data/ByteArray::compareTo → KILLED
+ +
+
+
        return bytes[i] - other.bytes[i];
+ +150 + + + + + + +
      }
+ +151 + + + + + + +
    }
+ +152 + + + + + + +
+ +153 + + + + + + +
    return 0;
+ +154 + + + + + + +
  }
+ +155 + + + + + + +
}

Mutations

54 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.ByteArrayTest.testEncodeBase64Url(com.yubico.webauthn.data.ByteArrayTest)
negated conditional → KILLED

+
69 + + + +

1.1
Location : fromBase64
Killed by : com.yubico.webauthn.data.ByteArrayTest.codecMimeTest(com.yubico.webauthn.data.ByteArrayTest)
negated conditional → KILLED

+
70 + + + +

1.1
Location : fromBase64
Killed by : com.yubico.webauthn.data.ByteArrayTest.codecMimeTest(com.yubico.webauthn.data.ByteArrayTest)
replaced return value with null for com/yubico/webauthn/data/ByteArray::fromBase64 → KILLED

+
79 + + + +

1.1
Location : fromBase64Url
Killed by : com.yubico.webauthn.data.ByteArrayTest.decodeBadAlphabetTest(com.yubico.webauthn.data.ByteArrayTest)
negated conditional → KILLED

+
80 + + + +

1.1
Location : fromBase64Url
Killed by : com.yubico.webauthn.data.ByteArrayTest.decodeTest(com.yubico.webauthn.data.ByteArrayTest)
replaced return value with null for com/yubico/webauthn/data/ByteArray::fromBase64Url → KILLED

+
88 + + + +

1.1
Location : fromHex
Killed by : com.yubico.webauthn.data.ByteArrayTest.decodeBadHexLengthTest(com.yubico.webauthn.data.ByteArrayTest)
negated conditional → KILLED

+
90 + + + +

1.1
Location : fromHex
Killed by : com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest)
replaced return value with null for com/yubico/webauthn/data/ByteArray::fromHex → KILLED

+
100 + + + +

1.1
Location : concat
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
101 + + + +

1.1
Location : concat
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/ByteArray::concat → KILLED

+
105 + + + +

1.1
Location : isEmpty
Killed by : com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest)
negated conditional → KILLED

2.2
Location : isEmpty
Killed by : com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest)
replaced boolean return with true for com/yubico/webauthn/data/ByteArray::isEmpty → KILLED

+
109 + + + +

1.1
Location : size
Killed by : com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest)
replaced int return with 0 for com/yubico/webauthn/data/ByteArray::size → KILLED

+
116 + + + +

1.1
Location : getBytes
Killed by : com.yubico.webauthn.data.ByteArrayTest.decodeTest(com.yubico.webauthn.data.ByteArrayTest)
replaced return value with null for com/yubico/webauthn/data/ByteArray::getBytes → KILLED

+
123 + + + +

1.1
Location : getBase64
Killed by : com.yubico.webauthn.data.ByteArrayTest.codecMimeTest(com.yubico.webauthn.data.ByteArrayTest)
replaced return value with "" for com/yubico/webauthn/data/ByteArray::getBase64 → KILLED

+
130 + + + +

1.1
Location : getBase64Url
Killed by : com.yubico.webauthn.data.ByteArrayTest.testEncodeBase64Url(com.yubico.webauthn.data.ByteArrayTest)
replaced return value with "" for com/yubico/webauthn/data/ByteArray::getBase64Url → KILLED

+
138 + + + +

1.1
Location : getHex
Killed by : com.yubico.webauthn.data.AuthenticatorDataSpec
replaced return value with "" for com/yubico/webauthn/data/ByteArray::getHex → KILLED

+
143 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)
negated conditional → KILLED

+
144 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)
Replaced integer subtraction with addition → KILLED

2.2
Location : compareTo
Killed by : com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)
replaced int return with 0 for com/yubico/webauthn/data/ByteArray::compareTo → KILLED

+
147 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)
changed conditional boundary → KILLED

2.2
Location : compareTo
Killed by : com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)
negated conditional → KILLED

+
148 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)
negated conditional → KILLED

+
149 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.data.BuildersSpec
Replaced integer subtraction with addition → KILLED

2.2
Location : compareTo
Killed by : com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)
replaced int return with 0 for com/yubico/webauthn/data/ByteArray::compareTo → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/COSEAlgorithmIdentifier.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/COSEAlgorithmIdentifier.java.html new file mode 100644 index 000000000..82fed7c46 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/COSEAlgorithmIdentifier.java.html @@ -0,0 +1,1801 @@ + + + + + + + + + +

COSEAlgorithmIdentifier.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +29 + + + + + + +
import com.upokecenter.cbor.CBORException;
+ +30 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +31 + + + + + + +
import java.util.Optional;
+ +32 + + + + + + +
import java.util.stream.Stream;
+ +33 + + + + + + +
import lombok.Getter;
+ +34 + + + + + + +
import lombok.NonNull;
+ +35 + + + + + + +
+ +36 + + + + + + +
/**
+ +37 + + + + + + +
 * A number identifying a cryptographic algorithm. The algorithm identifiers SHOULD be values
+ +38 + + + + + + +
 * registered in the IANA COSE Algorithms registry, for instance, -7 for "ES256" and -257 for
+ +39 + + + + + + +
 * "RS256".
+ +40 + + + + + + +
 *
+ +41 + + + + + + +
 * @see <a
+ +42 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#typedefdef-cosealgorithmidentifier">§5.10.5.
+ +43 + + + + + + +
 *     Cryptographic Algorithm Identifier (typedef COSEAlgorithmIdentifier)</a>
+ +44 + + + + + + +
 */
+ +45 + + + + + + +
public enum COSEAlgorithmIdentifier {
+ +46 + + + + + + +
  EdDSA(-8),
+ +47 + + + + + + +
  ES256(-7),
+ +48 + + + + + + +
  ES384(-35),
+ +49 + + + + + + +
  ES512(-36),
+ +50 + + + + + + +
  RS256(-257),
+ +51 + + + + + + +
  RS384(-258),
+ +52 + + + + + + +
  RS512(-259),
+ +53 + + + + + + +
  RS1(-65535);
+ +54 + + + + + + +
+ +55 + + + + + + +
  @JsonValue @Getter private final long id;
+ +56 + + + + + + +
+ +57 + + + + + + +
  COSEAlgorithmIdentifier(long id) {
+ +58 + + + + + + +
    this.id = id;
+ +59 + + + + + + +
  }
+ +60 + + + + + + +
+ +61 + + + + + + +
  /**
+ +62 + + + + + + +
   * Attempt to parse an integer as a {@link COSEAlgorithmIdentifier}.
+ +63 + + + + + + +
   *
+ +64 + + + + + + +
   * @param id an integer equal to the {@link #getId() id} of a constant in {@link
+ +65 + + + + + + +
   *     COSEAlgorithmIdentifier}
+ +66 + + + + + + +
   * @return The {@link COSEAlgorithmIdentifier} instance whose {@link #getId() id} equals <code>id
+ +67 + + + + + + +
   *     </code>, if any.
+ +68 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-alg-identifier">§5.8.5.
+ +69 + + + + + + +
   *     Cryptographic Algorithm Identifier (typedef COSEAlgorithmIdentifier)</a>
+ +70 + + + + + + +
   */
+ +71 + + + + + + +
  public static Optional<COSEAlgorithmIdentifier> fromId(long id) {
+ +72 + + +3 + +1. lambda$fromId$0 : replaced boolean return with true for com/yubico/webauthn/data/COSEAlgorithmIdentifier::lambda$fromId$0 → KILLED
+2. lambda$fromId$0 : negated conditional → KILLED
+3. fromId : replaced return value with Optional.empty for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromId → KILLED
+ +
+
+
    return Stream.of(values()).filter(v -> v.id == id).findAny();
+ +73 + + + + + + +
  }
+ +74 + + + + + + +
+ +75 + + + + + + +
  /**
+ +76 + + + + + + +
   * Read the {@link COSEAlgorithmIdentifier} from a public key in COSE_Key format.
+ +77 + + + + + + +
   *
+ +78 + + + + + + +
   * @param publicKeyCose a public key in COSE_Key format.
+ +79 + + + + + + +
   * @return The <code>alg</code> of the <code>publicKeyCose</code> parsed as a {@link
+ +80 + + + + + + +
   *     COSEAlgorithmIdentifier}, if possible. Returns empty if the {@link COSEAlgorithmIdentifier}
+ +81 + + + + + + +
   *     enum has no constant matching the <code>alg</code> value.
+ +82 + + + + + + +
   * @throws IllegalArgumentException if <code>publicKeyCose</code> is not a well-formed COSE_Key.
+ +83 + + + + + + +
   */
+ +84 + + +1 + +1. fromPublicKey : negated conditional → KILLED
+ +
+
+
  public static Optional<COSEAlgorithmIdentifier> fromPublicKey(@NonNull ByteArray publicKeyCose) {
+ +85 + + + + + + +
    final CBORObject ALG = CBORObject.FromObject(3);
+ +86 + + + + + + +
    final int alg;
+ +87 + + + + + + +
    try {
+ +88 + + + + + + +
      CBORObject cose = CBORObject.DecodeFromBytes(publicKeyCose.getBytes());
+ +89 + + +1 + +1. fromPublicKey : negated conditional → KILLED
+ +
+
+
      if (!cose.ContainsKey(ALG)) {
+ +90 + + + + + + +
        throw new IllegalArgumentException(
+ +91 + + + + + + +
            "Public key does not contain an \"alg\"(3) value: " + publicKeyCose);
+ +92 + + + + + + +
      }
+ +93 + + + + + + +
      CBORObject algCbor = cose.get(ALG);
+ +94 + + +2 + +1. fromPublicKey : negated conditional → KILLED
+2. fromPublicKey : negated conditional → KILLED
+ +
+
+
      if (!(algCbor.isNumber() && algCbor.AsNumber().IsInteger())) {
+ +95 + + + + + + +
        throw new IllegalArgumentException(
+ +96 + + + + + + +
            "Public key has non-integer \"alg\"(3) value: " + publicKeyCose);
+ +97 + + + + + + +
      }
+ +98 + + + + + + +
      alg = algCbor.AsInt32();
+ +99 + + + + + + +
    } catch (CBORException e) {
+ +100 + + + + + + +
      throw new IllegalArgumentException("Failed to parse public key", e);
+ +101 + + + + + + +
    }
+ +102 + + +1 + +1. fromPublicKey : replaced return value with Optional.empty for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromPublicKey → KILLED
+ +
+
+
    return fromId(alg);
+ +103 + + + + + + +
  }
+ +104 + + + + + + +
+ +105 + + + + + + +
  @JsonCreator
+ +106 + + + + + + +
  private static COSEAlgorithmIdentifier fromJson(long id) {
+ +107 + + +1 + +1. fromJson : replaced return value with null for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromJson → KILLED
+ +
+
+
    return fromId(id)
+ +108 + + + + + + +
        .orElseThrow(
+ +109 + + +1 + +1. lambda$fromJson$1 : replaced return value with null for com/yubico/webauthn/data/COSEAlgorithmIdentifier::lambda$fromJson$1 → KILLED
+ +
+
+
            () -> new IllegalArgumentException("Unknown COSE algorithm identifier: " + id));
+ +110 + + + + + + +
  }
+ +111 + + + + + + +
}

Mutations

72 + + + +

1.1
Location : lambda$fromId$0
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced boolean return with true for com/yubico/webauthn/data/COSEAlgorithmIdentifier::lambda$fromId$0 → KILLED

2.2
Location : lambda$fromId$0
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

3.3
Location : fromId
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromId → KILLED

+
84 + + + +

1.1
Location : fromPublicKey
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
89 + + + +

1.1
Location : fromPublicKey
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
94 + + + +

1.1
Location : fromPublicKey
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

2.2
Location : fromPublicKey
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
102 + + + +

1.1
Location : fromPublicKey
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromPublicKey → KILLED

+
107 + + + +

1.1
Location : fromJson
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with null for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromJson → KILLED

+
109 + + + +

1.1
Location : lambda$fromJson$1
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/data/COSEAlgorithmIdentifier::lambda$fromJson$1 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ClientAssertionExtensionOutputs.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ClientAssertionExtensionOutputs.java.html new file mode 100644 index 000000000..12ddee3ff --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ClientAssertionExtensionOutputs.java.html @@ -0,0 +1,2497 @@ + + + + + + + + + +

ClientAssertionExtensionOutputs.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +30 + + + + + + +
import java.util.HashSet;
+ +31 + + + + + + +
import java.util.Optional;
+ +32 + + + + + + +
import java.util.Set;
+ +33 + + + + + + +
import lombok.Builder;
+ +34 + + + + + + +
import lombok.EqualsAndHashCode;
+ +35 + + + + + + +
import lombok.NonNull;
+ +36 + + + + + + +
import lombok.Value;
+ +37 + + + + + + +
+ +38 + + + + + + +
/**
+ +39 + + + + + + +
 * Contains <a
+ +40 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-extension-output">client
+ +41 + + + + + + +
 * extension outputs</a> from a <code>navigator.credentials.get()</code> operation.
+ +42 + + + + + + +
 *
+ +43 + + + + + + +
 * <p>Note that there is no guarantee that any extension input present in {@link
+ +44 + + + + + + +
 * AssertionExtensionInputs} will have a corresponding output present here.
+ +45 + + + + + + +
 *
+ +46 + + + + + + +
 * <p>The authenticator extension outputs are contained in the {@link AuthenticatorData} structure.
+ +47 + + + + + + +
 *
+ +48 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-extensions">§9. WebAuthn
+ +49 + + + + + + +
 *     Extensions</a>
+ +50 + + + + + + +
 */
+ +51 + + + + + + +
@Value
+ +52 + + + + + + +
@Builder(toBuilder = true)
+ +53 + + + + + + +
@JsonIgnoreProperties(ignoreUnknown = true)
+ +54 + + + + + + +
public class ClientAssertionExtensionOutputs implements ClientExtensionOutputs {
+ +55 + + + + + + +
+ +56 + + + + + + +
  /**
+ +57 + + + + + + +
   * The extension output for the FIDO AppID Extension (<code>appid</code>), if any.
+ +58 + + + + + + +
   *
+ +59 + + + + + + +
   * <p>This value should be ignored because its behaviour is underspecified, see: <a
+ +60 + + + + + + +
   * href="https://github.com/w3c/webauthn/issues/1034">https://github.com/w3c/webauthn/issues/1034</a>.
+ +61 + + + + + + +
   *
+ +62 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +63 + + + + + + +
   *     FIDO AppID Extension (appid)</a>
+ +64 + + + + + + +
   */
+ +65 + + + + + + +
  private final Boolean appid;
+ +66 + + + + + + +
+ +67 + + + + + + +
  private final Extensions.LargeBlob.LargeBlobAuthenticationOutput largeBlob;
+ +68 + + + + + + +
+ +69 + + + + + + +
  @JsonCreator
+ +70 + + + + + + +
  private ClientAssertionExtensionOutputs(
+ +71 + + + + + + +
      @JsonProperty("appid") Boolean appid,
+ +72 + + + + + + +
      @JsonProperty("largeBlob") Extensions.LargeBlob.LargeBlobAuthenticationOutput largeBlob) {
+ +73 + + + + + + +
    this.appid = appid;
+ +74 + + + + + + +
    this.largeBlob = largeBlob;
+ +75 + + + + + + +
  }
+ +76 + + + + + + +
+ +77 + + + + + + +
  @Override
+ +78 + + + + + + +
  @EqualsAndHashCode.Include
+ +79 + + + + + + +
  public Set<String> getExtensionIds() {
+ +80 + + + + + + +
    HashSet<String> ids = new HashSet<>();
+ +81 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (appid != null) {
+ +82 + + + + + + +
      ids.add(Extensions.Appid.EXTENSION_ID);
+ +83 + + + + + + +
    }
+ +84 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (largeBlob != null) {
+ +85 + + + + + + +
      ids.add(Extensions.LargeBlob.EXTENSION_ID);
+ +86 + + + + + + +
    }
+ +87 + + +1 + +1. getExtensionIds : replaced return value with Collections.emptySet for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getExtensionIds → KILLED
+ +
+
+
    return ids;
+ +88 + + + + + + +
  }
+ +89 + + + + + + +
+ +90 + + + + + + +
  /**
+ +91 + + + + + + +
   * The extension output for the FIDO AppID Extension (<code>appid</code>), if any.
+ +92 + + + + + + +
   *
+ +93 + + + + + + +
   * <p>This value should be ignored because its behaviour is underspecified, see: <a
+ +94 + + + + + + +
   * href="https://github.com/w3c/webauthn/issues/1034">https://github.com/w3c/webauthn/issues/1034</a>.
+ +95 + + + + + + +
   *
+ +96 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +97 + + + + + + +
   *     FIDO AppID Extension (appid)</a>
+ +98 + + + + + + +
   */
+ +99 + + + + + + +
  public Optional<Boolean> getAppid() {
+ +100 + + +1 + +1. getAppid : replaced return value with Optional.empty for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getAppid → SURVIVED
+ +
+
+
    return Optional.ofNullable(appid);
+ +101 + + + + + + +
  }
+ +102 + + + + + + +
+ +103 + + + + + + +
  /**
+ +104 + + + + + + +
   * The extension output for the <a
+ +105 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">Large blob
+ +106 + + + + + + +
   * storage (<code>largeBlob</code>) extension</a>, if any.
+ +107 + + + + + + +
   *
+ +108 + + + + + + +
   * @see com.yubico.webauthn.data.Extensions.LargeBlob.LargeBlobRegistrationOutput
+ +109 + + + + + + +
   * @see <a
+ +110 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.Large
+ +111 + + + + + + +
   *     blob storage extension (largeBlob)</a>
+ +112 + + + + + + +
   */
+ +113 + + + + + + +
  public Optional<Extensions.LargeBlob.LargeBlobAuthenticationOutput> getLargeBlob() {
+ +114 + + +1 + +1. getLargeBlob : replaced return value with Optional.empty for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getLargeBlob → KILLED
+ +
+
+
    return Optional.ofNullable(largeBlob);
+ +115 + + + + + + +
  }
+ +116 + + + + + + +
+ +117 + + + + + + +
  public static class ClientAssertionExtensionOutputsBuilder {
+ +118 + + + + + + +
+ +119 + + + + + + +
    /**
+ +120 + + + + + + +
     * The extension output for the FIDO AppID Extension (<code>appid</code>).
+ +121 + + + + + + +
     *
+ +122 + + + + + + +
     * <p>This value should be ignored because its behaviour is underspecified, see: <a
+ +123 + + + + + + +
     * href="https://github.com/w3c/webauthn/issues/1034">https://github.com/w3c/webauthn/issues/1034</a>.
+ +124 + + + + + + +
     *
+ +125 + + + + + + +
     * @see <a
+ +126 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +127 + + + + + + +
     *     FIDO AppID Extension (appid)</a>
+ +128 + + + + + + +
     */
+ +129 + + +1 + +1. appid : negated conditional → KILLED
+ +
+
+
    public ClientAssertionExtensionOutputsBuilder appid(@NonNull Optional<Boolean> appid) {
+ +130 + + + + + + +
      this.appid = appid.orElse(null);
+ +131 + + +1 + +1. appid : replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid → KILLED
+ +
+
+
      return this;
+ +132 + + + + + + +
    }
+ +133 + + + + + + +
+ +134 + + + + + + +
    /*
+ +135 + + + + + + +
     * Workaround, see: https://github.com/rzwitserloot/lombok/issues/2623#issuecomment-714816001
+ +136 + + + + + + +
     * Consider reverting this workaround if Lombok fixes that issue.
+ +137 + + + + + + +
     */
+ +138 + + + + + + +
    private ClientAssertionExtensionOutputsBuilder appid(Boolean appid) {
+ +139 + + +1 + +1. appid : replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid → KILLED
+ +
+
+
      return this.appid(Optional.ofNullable(appid));
+ +140 + + + + + + +
    }
+ +141 + + + + + + +
+ +142 + + + + + + +
    /**
+ +143 + + + + + + +
     * The extension output for the FIDO AppID Extension (<code>appid</code>).
+ +144 + + + + + + +
     *
+ +145 + + + + + + +
     * <p>This value should be ignored because its behaviour is underspecified, see: <a
+ +146 + + + + + + +
     * href="https://github.com/w3c/webauthn/issues/1034">https://github.com/w3c/webauthn/issues/1034</a>.
+ +147 + + + + + + +
     *
+ +148 + + + + + + +
     * @see <a
+ +149 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +150 + + + + + + +
     *     FIDO AppID Extension (appid)</a>
+ +151 + + + + + + +
     */
+ +152 + + + + + + +
    public ClientAssertionExtensionOutputsBuilder appid(boolean appid) {
+ +153 + + +1 + +1. appid : replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid → KILLED
+ +
+
+
      return this.appid(Optional.of(appid));
+ +154 + + + + + + +
    }
+ +155 + + + + + + +
  }
+ +156 + + + + + + +
}

Mutations

81 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
84 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
87 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Collections.emptySet for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getExtensionIds → KILLED

+
100 + + + +

1.1
Location : getAppid
Killed by : none
replaced return value with Optional.empty for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getAppid → SURVIVED

+
114 + + + +

1.1
Location : getLargeBlob
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getLargeBlob → KILLED

+
129 + + + +

1.1
Location : appid
Killed by : com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest)
negated conditional → KILLED

+
131 + + + +

1.1
Location : appid
Killed by : com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest)
replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid → KILLED

+
139 + + + +

1.1
Location : appid
Killed by : com.yubico.webauthn.data.BuildersSpec
replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid → KILLED

+
153 + + + +

1.1
Location : appid
Killed by : com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest)
replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ClientRegistrationExtensionOutputs.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ClientRegistrationExtensionOutputs.java.html new file mode 100644 index 000000000..22a75bd04 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ClientRegistrationExtensionOutputs.java.html @@ -0,0 +1,2083 @@ + + + + + + + + + +

ClientRegistrationExtensionOutputs.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +30 + + + + + + +
import java.util.HashSet;
+ +31 + + + + + + +
import java.util.Optional;
+ +32 + + + + + + +
import java.util.Set;
+ +33 + + + + + + +
import lombok.Builder;
+ +34 + + + + + + +
import lombok.EqualsAndHashCode;
+ +35 + + + + + + +
import lombok.Value;
+ +36 + + + + + + +
+ +37 + + + + + + +
/**
+ +38 + + + + + + +
 * Contains <a
+ +39 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-extension-output">client
+ +40 + + + + + + +
 * extension outputs</a> from a <code>navigator.credentials.create()</code> operation.
+ +41 + + + + + + +
 *
+ +42 + + + + + + +
 * <p>Note that there is no guarantee that any extension input present in {@link
+ +43 + + + + + + +
 * AssertionExtensionInputs} will have a corresponding output present here.
+ +44 + + + + + + +
 *
+ +45 + + + + + + +
 * <p>The authenticator extension outputs are contained in the {@link AuthenticatorData} structure.
+ +46 + + + + + + +
 *
+ +47 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-extensions">§9. WebAuthn
+ +48 + + + + + + +
 *     Extensions</a>
+ +49 + + + + + + +
 */
+ +50 + + + + + + +
@Value
+ +51 + + + + + + +
@Builder(toBuilder = true)
+ +52 + + + + + + +
@JsonIgnoreProperties(ignoreUnknown = true)
+ +53 + + + + + + +
public class ClientRegistrationExtensionOutputs implements ClientExtensionOutputs {
+ +54 + + + + + + +
+ +55 + + + + + + +
  private final Boolean appidExclude;
+ +56 + + + + + + +
+ +57 + + + + + + +
  private final Extensions.CredentialProperties.CredentialPropertiesOutput credProps;
+ +58 + + + + + + +
+ +59 + + + + + + +
  private final Extensions.LargeBlob.LargeBlobRegistrationOutput largeBlob;
+ +60 + + + + + + +
+ +61 + + + + + + +
  @JsonCreator
+ +62 + + + + + + +
  private ClientRegistrationExtensionOutputs(
+ +63 + + + + + + +
      @JsonProperty("appidExclude") Boolean appidExclude,
+ +64 + + + + + + +
      @JsonProperty("credProps")
+ +65 + + + + + + +
          Extensions.CredentialProperties.CredentialPropertiesOutput credProps,
+ +66 + + + + + + +
      @JsonProperty("largeBlob") Extensions.LargeBlob.LargeBlobRegistrationOutput largeBlob) {
+ +67 + + + + + + +
    this.appidExclude = appidExclude;
+ +68 + + + + + + +
    this.credProps = credProps;
+ +69 + + + + + + +
    this.largeBlob = largeBlob;
+ +70 + + + + + + +
  }
+ +71 + + + + + + +
+ +72 + + + + + + +
  @Override
+ +73 + + + + + + +
  @EqualsAndHashCode.Include
+ +74 + + + + + + +
  public Set<String> getExtensionIds() {
+ +75 + + + + + + +
    HashSet<String> ids = new HashSet<>();
+ +76 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (appidExclude != null) {
+ +77 + + + + + + +
      ids.add(Extensions.AppidExclude.EXTENSION_ID);
+ +78 + + + + + + +
    }
+ +79 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (credProps != null) {
+ +80 + + + + + + +
      ids.add(Extensions.CredentialProperties.EXTENSION_ID);
+ +81 + + + + + + +
    }
+ +82 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (largeBlob != null) {
+ +83 + + + + + + +
      ids.add(Extensions.LargeBlob.EXTENSION_ID);
+ +84 + + + + + + +
    }
+ +85 + + +1 + +1. getExtensionIds : replaced return value with Collections.emptySet for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getExtensionIds → KILLED
+ +
+
+
    return ids;
+ +86 + + + + + + +
  }
+ +87 + + + + + + +
+ +88 + + + + + + +
  /**
+ +89 + + + + + + +
   * The extension output for the <a
+ +90 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">FIDO
+ +91 + + + + + + +
   * AppID Exclusion (<code>appidExclude</code>) Extension</a>, if any.
+ +92 + + + + + + +
   *
+ +93 + + + + + + +
   * <p>This value is generally not useful, as it only communicates whether the client supports the
+ +94 + + + + + + +
   * extension.
+ +95 + + + + + + +
   *
+ +96 + + + + + + +
   * @see <a
+ +97 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.FIDO
+ +98 + + + + + + +
   *     AppID Exclusion Extension (appidExclude)</a>
+ +99 + + + + + + +
   */
+ +100 + + + + + + +
  public Optional<Boolean> getAppidExclude() {
+ +101 + + +1 + +1. getAppidExclude : replaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getAppidExclude → KILLED
+ +
+
+
    return Optional.ofNullable(appidExclude);
+ +102 + + + + + + +
  }
+ +103 + + + + + + +
+ +104 + + + + + + +
  /**
+ +105 + + + + + + +
   * The extension output for the Credential Properties Extension (<code>credProps</code>), if any.
+ +106 + + + + + + +
   *
+ +107 + + + + + + +
   * <p>This value MAY be present but have all members empty if the extension was successfully
+ +108 + + + + + + +
   * processed but no credential properties could be determined.
+ +109 + + + + + + +
   *
+ +110 + + + + + + +
   * @see com.yubico.webauthn.data.Extensions.CredentialProperties.CredentialPropertiesOutput
+ +111 + + + + + + +
   * @see <a
+ +112 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-credential-properties-extension">§10.4.
+ +113 + + + + + + +
   *     Credential Properties Extension (credProps)</a>
+ +114 + + + + + + +
   */
+ +115 + + + + + + +
  public Optional<Extensions.CredentialProperties.CredentialPropertiesOutput> getCredProps() {
+ +116 + + +1 + +1. getCredProps : replaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getCredProps → KILLED
+ +
+
+
    return Optional.ofNullable(credProps);
+ +117 + + + + + + +
  }
+ +118 + + + + + + +
+ +119 + + + + + + +
  /**
+ +120 + + + + + + +
   * The extension output for the Large blob storage extension (<code>largeBlob</code>), if any.
+ +121 + + + + + + +
   *
+ +122 + + + + + + +
   * @see com.yubico.webauthn.data.Extensions.LargeBlob.LargeBlobRegistrationOutput
+ +123 + + + + + + +
   * @see <a
+ +124 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.Large
+ +125 + + + + + + +
   *     blob storage extension (largeBlob)</a>
+ +126 + + + + + + +
   */
+ +127 + + + + + + +
  public Optional<Extensions.LargeBlob.LargeBlobRegistrationOutput> getLargeBlob() {
+ +128 + + +1 + +1. getLargeBlob : replaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getLargeBlob → KILLED
+ +
+
+
    return Optional.ofNullable(largeBlob);
+ +129 + + + + + + +
  }
+ +130 + + + + + + +
}

Mutations

76 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
79 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
82 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
85 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Collections.emptySet for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getExtensionIds → KILLED

+
101 + + + +

1.1
Location : getAppidExclude
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getAppidExclude → KILLED

+
116 + + + +

1.1
Location : getCredProps
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getCredProps → KILLED

+
128 + + + +

1.1
Location : getLargeBlob
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getLargeBlob → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/CollectedClientData.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/CollectedClientData.java.html new file mode 100644 index 000000000..919b1cbb5 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/CollectedClientData.java.html @@ -0,0 +1,2411 @@ + + + + + + + + + +

CollectedClientData.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.core.JsonGenerator;
+ +29 + + + + + + +
import com.fasterxml.jackson.databind.JsonNode;
+ +30 + + + + + + +
import com.fasterxml.jackson.databind.SerializerProvider;
+ +31 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+ +32 + + + + + + +
import com.fasterxml.jackson.databind.node.ObjectNode;
+ +33 + + + + + + +
import com.yubico.internal.util.ExceptionUtil;
+ +34 + + + + + + +
import com.yubico.internal.util.JacksonCodecs;
+ +35 + + + + + + +
import com.yubico.webauthn.data.exception.Base64UrlException;
+ +36 + + + + + + +
import java.io.IOException;
+ +37 + + + + + + +
import java.util.Optional;
+ +38 + + + + + + +
import lombok.AccessLevel;
+ +39 + + + + + + +
import lombok.Getter;
+ +40 + + + + + + +
import lombok.NonNull;
+ +41 + + + + + + +
import lombok.Value;
+ +42 + + + + + + +
+ +43 + + + + + + +
/**
+ +44 + + + + + + +
 * The client data represents the contextual bindings of both the Relying Party and the client.
+ +45 + + + + + + +
 *
+ +46 + + + + + + +
 * @see <a
+ +47 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-collectedclientdata">§5.10.1.
+ +48 + + + + + + +
 *     Client Data Used in WebAuthn Signatures (dictionary CollectedClientData) </a>
+ +49 + + + + + + +
 */
+ +50 + + + + + + +
@Value
+ +51 + + + + + + +
@JsonSerialize(using = CollectedClientData.JsonSerializer.class)
+ +52 + + + + + + +
public class CollectedClientData {
+ +53 + + + + + + +
+ +54 + + + + + + +
  /** The client data returned from the client. */
+ +55 + + + + + + +
  @NonNull
+ +56 + + + + + + +
  @Getter(AccessLevel.NONE)
+ +57 + + + + + + +
  private final ByteArray clientDataJson;
+ +58 + + + + + + +
+ +59 + + + + + + +
  @NonNull
+ +60 + + + + + + +
  @Getter(AccessLevel.NONE)
+ +61 + + + + + + +
  private final transient ObjectNode clientData;
+ +62 + + + + + + +
+ +63 + + + + + + +
  /**
+ +64 + + + + + + +
   * The base64url encoding of the challenge provided by the Relying Party. See the <a
+ +65 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-cryptographic-challenges">§13.1
+ +66 + + + + + + +
   * Cryptographic Challenges</a> security consideration.
+ +67 + + + + + + +
   */
+ +68 + + + + + + +
  @NonNull private final transient ByteArray challenge;
+ +69 + + + + + + +
+ +70 + + + + + + +
  /**
+ +71 + + + + + + +
   * The fully qualified origin of the requester, as provided to the authenticator by the client, in
+ +72 + + + + + + +
   * the syntax defined by <a href="https://tools.ietf.org/html/rfc6454">RFC 6454</a>.
+ +73 + + + + + + +
   */
+ +74 + + + + + + +
  @NonNull private final transient String origin;
+ +75 + + + + + + +
+ +76 + + + + + + +
  /** The type of the requested operation, set by the client. */
+ +77 + + + + + + +
  @NonNull private final transient String type;
+ +78 + + + + + + +
+ +79 + + + + + + +
  @JsonCreator
+ +80 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
  public CollectedClientData(@NonNull ByteArray clientDataJSON)
+ +81 + + + + + + +
      throws IOException, Base64UrlException {
+ +82 + + + + + + +
    JsonNode clientData = JacksonCodecs.json().readTree(clientDataJSON.getBytes());
+ +83 + + + + + + +
+ +84 + + +2 + +1. <init> : negated conditional → KILLED
+2. <init> : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +85 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        clientData != null && clientData.isObject(), "Collected client data must be JSON object.");
+ +86 + + + + + + +
+ +87 + + + + + + +
    this.clientDataJson = clientDataJSON;
+ +88 + + + + + + +
    this.clientData = (ObjectNode) clientData;
+ +89 + + + + + + +
+ +90 + + + + + + +
    try {
+ +91 + + + + + + +
      challenge = ByteArray.fromBase64Url(clientData.get("challenge").textValue());
+ +92 + + + + + + +
    } catch (NullPointerException e) {
+ +93 + + + + + + +
      throw new IllegalArgumentException("Missing field: \"challenge\"");
+ +94 + + + + + + +
    } catch (Base64UrlException e) {
+ +95 + + + + + + +
      throw new Base64UrlException("Invalid \"challenge\" value", e);
+ +96 + + + + + + +
    }
+ +97 + + + + + + +
+ +98 + + + + + + +
    try {
+ +99 + + + + + + +
      origin = clientData.get("origin").textValue();
+ +100 + + + + + + +
    } catch (NullPointerException e) {
+ +101 + + + + + + +
      throw new IllegalArgumentException("Missing field: \"origin\"");
+ +102 + + + + + + +
    }
+ +103 + + + + + + +
+ +104 + + + + + + +
    try {
+ +105 + + + + + + +
      type = clientData.get("type").textValue();
+ +106 + + + + + + +
    } catch (NullPointerException e) {
+ +107 + + + + + + +
      throw new IllegalArgumentException("Missing field: \"type\"");
+ +108 + + + + + + +
    }
+ +109 + + + + + + +
  }
+ +110 + + + + + + +
+ +111 + + + + + + +
  /**
+ +112 + + + + + + +
   * Information about the state of the <a href="https://tools.ietf.org/html/rfc8471">Token Binding
+ +113 + + + + + + +
   * protocol</a> used when communicating with the Relying Party. Its absence indicates that the
+ +114 + + + + + + +
   * client doesn't support token binding.
+ +115 + + + + + + +
   */
+ +116 + + + + + + +
  public final Optional<TokenBindingInfo> getTokenBinding() {
+ +117 + + +1 + +1. getTokenBinding : replaced return value with Optional.empty for com/yubico/webauthn/data/CollectedClientData::getTokenBinding → KILLED
+ +
+
+
    return Optional.ofNullable(clientData.get("tokenBinding"))
+ +118 + + + + + + +
        .map(
+ +119 + + + + + + +
            tb -> {
+ +120 + + +1 + +1. lambda$getTokenBinding$1 : negated conditional → KILLED
+ +
+
+
              if (tb.isObject()) {
+ +121 + + + + + + +
                String status = tb.get("status").textValue();
+ +122 + + +1 + +1. lambda$getTokenBinding$1 : replaced return value with null for com/yubico/webauthn/data/CollectedClientData::lambda$getTokenBinding$1 → KILLED
+ +
+
+
                return new TokenBindingInfo(
+ +123 + + + + + + +
                    TokenBindingStatus.fromJsonString(status),
+ +124 + + + + + + +
                    Optional.ofNullable(tb.get("id"))
+ +125 + + + + + + +
                        .map(JsonNode::textValue)
+ +126 + + + + + + +
                        .map(
+ +127 + + + + + + +
                            id -> {
+ +128 + + + + + + +
                              try {
+ +129 + + +1 + +1. lambda$getTokenBinding$0 : replaced return value with null for com/yubico/webauthn/data/CollectedClientData::lambda$getTokenBinding$0 → KILLED
+ +
+
+
                                return ByteArray.fromBase64Url(id);
+ +130 + + + + + + +
                              } catch (Base64UrlException e) {
+ +131 + + + + + + +
                                throw new IllegalArgumentException(
+ +132 + + + + + + +
                                    "Property \"id\" is not valid Base64Url data", e);
+ +133 + + + + + + +
                              }
+ +134 + + + + + + +
                            }));
+ +135 + + + + + + +
              } else {
+ +136 + + + + + + +
                throw new IllegalArgumentException(
+ +137 + + + + + + +
                    "Property \"tokenBinding\" missing from client data.");
+ +138 + + + + + + +
              }
+ +139 + + + + + + +
            });
+ +140 + + + + + + +
  }
+ +141 + + + + + + +
+ +142 + + + + + + +
  static class JsonSerializer
+ +143 + + + + + + +
      extends com.fasterxml.jackson.databind.JsonSerializer<CollectedClientData> {
+ +144 + + + + + + +
    @Override
+ +145 + + + + + + +
    public void serialize(
+ +146 + + + + + + +
        CollectedClientData value, JsonGenerator gen, SerializerProvider serializers)
+ +147 + + + + + + +
        throws IOException {
+ +148 + + +1 + +1. serialize : removed call to com/fasterxml/jackson/core/JsonGenerator::writeString → KILLED
+ +
+
+
      gen.writeString(value.clientDataJson.getBase64Url());
+ +149 + + + + + + +
    }
+ +150 + + + + + + +
  }
+ +151 + + + + + + +
}

Mutations

80 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

+
84 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
85 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

+
117 + + + +

1.1
Location : getTokenBinding
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/CollectedClientData::getTokenBinding → KILLED

+
120 + + + +

1.1
Location : lambda$getTokenBinding$1
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

+
122 + + + +

1.1
Location : lambda$getTokenBinding$1
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
replaced return value with null for com/yubico/webauthn/data/CollectedClientData::lambda$getTokenBinding$1 → KILLED

+
129 + + + +

1.1
Location : lambda$getTokenBinding$0
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
replaced return value with null for com/yubico/webauthn/data/CollectedClientData::lambda$getTokenBinding$0 → KILLED

+
148 + + + +

1.1
Location : serialize
Killed by : com.yubico.webauthn.data.JsonIoSpec
removed call to com/fasterxml/jackson/core/JsonGenerator::writeString → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/Extensions.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/Extensions.java.html new file mode 100644 index 000000000..43f8bde54 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/Extensions.java.html @@ -0,0 +1,8487 @@ + + + + + + + + + +

Extensions.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.webauthn.data;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +4 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +5 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +6 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +7 + + + + + + +
import com.upokecenter.cbor.CBORType;
+ +8 + + + + + + +
import com.yubico.webauthn.StartRegistrationOptions;
+ +9 + + + + + + +
import com.yubico.webauthn.extension.uvm.KeyProtectionType;
+ +10 + + + + + + +
import com.yubico.webauthn.extension.uvm.MatcherProtectionType;
+ +11 + + + + + + +
import com.yubico.webauthn.extension.uvm.UserVerificationMethod;
+ +12 + + + + + + +
import java.util.List;
+ +13 + + + + + + +
import java.util.Optional;
+ +14 + + + + + + +
import java.util.Set;
+ +15 + + + + + + +
import java.util.stream.Collectors;
+ +16 + + + + + + +
import java.util.stream.Stream;
+ +17 + + + + + + +
import lombok.Builder;
+ +18 + + + + + + +
import lombok.NonNull;
+ +19 + + + + + + +
import lombok.Value;
+ +20 + + + + + + +
import lombok.experimental.UtilityClass;
+ +21 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +22 + + + + + + +
+ +23 + + + + + + +
/** Definitions for WebAuthn extensions. */
+ +24 + + + + + + +
@Slf4j
+ +25 + + + + + + +
@UtilityClass
+ +26 + + + + + + +
public class Extensions {
+ +27 + + + + + + +
+ +28 + + + + + + +
  /**
+ +29 + + + + + + +
   * Definitions for the FIDO AppID Extension (<code>appid</code>).
+ +30 + + + + + + +
   *
+ +31 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +32 + + + + + + +
   *     FIDO AppID Extension (appid)</a>
+ +33 + + + + + + +
   */
+ +34 + + + + + + +
  public static class Appid {
+ +35 + + + + + + +
    static final String EXTENSION_ID = "appid";
+ +36 + + + + + + +
  }
+ +37 + + + + + + +
+ +38 + + + + + + +
  /**
+ +39 + + + + + + +
   * Definitions for the 10.2. FIDO AppID Exclusion Extension (<code>appidExclude</code>).
+ +40 + + + + + + +
   *
+ +41 + + + + + + +
   * @see <a
+ +42 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">10.2.
+ +43 + + + + + + +
   *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +44 + + + + + + +
   */
+ +45 + + + + + + +
  public static class AppidExclude {
+ +46 + + + + + + +
    static final String EXTENSION_ID = "appidExclude";
+ +47 + + + + + + +
  }
+ +48 + + + + + + +
+ +49 + + + + + + +
  /**
+ +50 + + + + + + +
   * Definitions for the Credential Properties Extension (<code>credProps</code>).
+ +51 + + + + + + +
   *
+ +52 + + + + + + +
   * @see <a
+ +53 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-credential-properties-extension">§10.4.
+ +54 + + + + + + +
   *     Credential Properties Extension (credProps)</a>
+ +55 + + + + + + +
   */
+ +56 + + + + + + +
  public static class CredentialProperties {
+ +57 + + + + + + +
    static final String EXTENSION_ID = "credProps";
+ +58 + + + + + + +
+ +59 + + + + + + +
    /**
+ +60 + + + + + + +
     * Extension outputs for the Credential Properties Extension (<code>credProps</code>).
+ +61 + + + + + + +
     *
+ +62 + + + + + + +
     * @see <a
+ +63 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-credential-properties-extension">§10.4.
+ +64 + + + + + + +
     *     Credential Properties Extension (credProps)</a>
+ +65 + + + + + + +
     */
+ +66 + + + + + + +
    @Value
+ +67 + + + + + + +
    @Builder
+ +68 + + + + + + +
    public static class CredentialPropertiesOutput {
+ +69 + + + + + + +
      @JsonProperty("rk")
+ +70 + + + + + + +
      private final Boolean rk;
+ +71 + + + + + + +
+ +72 + + + + + + +
      @JsonCreator
+ +73 + + + + + + +
      private CredentialPropertiesOutput(@JsonProperty("rk") Boolean rk) {
+ +74 + + + + + + +
        this.rk = rk;
+ +75 + + + + + + +
      }
+ +76 + + + + + + +
+ +77 + + + + + + +
      /**
+ +78 + + + + + + +
       * This OPTIONAL property, known abstractly as the <b>resident key credential property</b>
+ +79 + + + + + + +
       * (i.e., <b>client-side discoverable credential property</b>), is a Boolean value indicating
+ +80 + + + + + + +
       * whether the {@link PublicKeyCredential} returned as a result of a registration ceremony is
+ +81 + + + + + + +
       * a <i>client-side discoverable credential</i> (passkey).
+ +82 + + + + + + +
       *
+ +83 + + + + + + +
       * <p>If this is <code>true</code>, the credential is a <i>discoverable credential</i>
+ +84 + + + + + + +
       * (passkey).
+ +85 + + + + + + +
       *
+ +86 + + + + + + +
       * <p>If this is <code>false</code>, the credential is a <i>server-side credential</i>.
+ +87 + + + + + + +
       *
+ +88 + + + + + + +
       * <p>If this is not present, it is not known whether the credential is a discoverable
+ +89 + + + + + + +
       * credential or a server-side credential.
+ +90 + + + + + + +
       *
+ +91 + + + + + + +
       * @see <a
+ +92 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-credentialpropertiesoutput-rk">§10.4.
+ +93 + + + + + + +
       *     Credential Properties Extension (credProps)</a>
+ +94 + + + + + + +
       * @see <a
+ +95 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-credential">Client-side
+ +96 + + + + + + +
       *     discoverable Credential</a>
+ +97 + + + + + + +
       * @see <a
+ +98 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#server-side-credential">Server-side
+ +99 + + + + + + +
       *     Credential</a>
+ +100 + + + + + + +
       * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +101 + + + + + + +
       *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +102 + + + + + + +
       */
+ +103 + + + + + + +
      public Optional<Boolean> getRk() {
+ +104 + + +1 + +1. getRk : replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$CredentialProperties$CredentialPropertiesOutput::getRk → KILLED
+ +
+
+
        return Optional.ofNullable(rk);
+ +105 + + + + + + +
      }
+ +106 + + + + + + +
    }
+ +107 + + + + + + +
  }
+ +108 + + + + + + +
+ +109 + + + + + + +
  /**
+ +110 + + + + + + +
   * Definitions for the Large blob storage extension (<code>largeBlob</code>).
+ +111 + + + + + + +
   *
+ +112 + + + + + + +
   * @see <a
+ +113 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +114 + + + + + + +
   *     Large blob storage extension (largeBlob)</a>
+ +115 + + + + + + +
   */
+ +116 + + + + + + +
  public static class LargeBlob {
+ +117 + + + + + + +
    static final String EXTENSION_ID = "largeBlob";
+ +118 + + + + + + +
+ +119 + + + + + + +
    /**
+ +120 + + + + + + +
     * Extension inputs for the Large blob storage extension (<code>largeBlob</code>) in
+ +121 + + + + + + +
     * registration ceremonies.
+ +122 + + + + + + +
     *
+ +123 + + + + + + +
     * @see <a
+ +124 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +125 + + + + + + +
     *     Large blob storage extension (largeBlob)</a>
+ +126 + + + + + + +
     */
+ +127 + + + + + + +
    @Value
+ +128 + + + + + + +
    public static class LargeBlobRegistrationInput {
+ +129 + + + + + + +
      /**
+ +130 + + + + + + +
       * The Relying Party's preference of whether the created credential should support the <code>
+ +131 + + + + + + +
       * largeBlob</code> extension.
+ +132 + + + + + + +
       */
+ +133 + + + + + + +
      @JsonProperty private final LargeBlobSupport support;
+ +134 + + + + + + +
+ +135 + + + + + + +
      @JsonCreator
+ +136 + + + + + + +
      public LargeBlobRegistrationInput(
+ +137 + + + + + + +
          /**
+ +138 + + + + + + +
           * The Relying Party's preference of whether the created credential should support the
+ +139 + + + + + + +
           * <code>
+ +140 + + + + + + +
           * largeBlob</code> extension.
+ +141 + + + + + + +
           *
+ +142 + + + + + + +
           * <p>Currently the only valid values are {@link LargeBlobSupport#REQUIRED} and {@link
+ +143 + + + + + + +
           * LargeBlobSupport#PREFERRED}, but custom values MAY be constructed in case more values
+ +144 + + + + + + +
           * are added in future revisions of the extension.
+ +145 + + + + + + +
           */
+ +146 + + + + + + +
          @JsonProperty("support") LargeBlobSupport support) {
+ +147 + + + + + + +
        this.support = support;
+ +148 + + + + + + +
      }
+ +149 + + + + + + +
+ +150 + + + + + + +
      /**
+ +151 + + + + + + +
       * The known valid arguments for the Large blob storage extension (<code>largeBlob</code>)
+ +152 + + + + + + +
       * input in registration ceremonies.
+ +153 + + + + + + +
       *
+ +154 + + + + + + +
       * <p>Currently the only valid values are {@link LargeBlobSupport#REQUIRED} and {@link
+ +155 + + + + + + +
       * LargeBlobSupport#PREFERRED}, but custom values MAY be constructed in case more values are
+ +156 + + + + + + +
       * added in future revisions of the extension.
+ +157 + + + + + + +
       *
+ +158 + + + + + + +
       * @see #REQUIRED
+ +159 + + + + + + +
       * @see #PREFERRED
+ +160 + + + + + + +
       * @see <a
+ +161 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +162 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +163 + + + + + + +
       */
+ +164 + + + + + + +
      @Value
+ +165 + + + + + + +
      public static class LargeBlobSupport {
+ +166 + + + + + + +
        /**
+ +167 + + + + + + +
         * The authenticator used for registration MUST support the <code>largeBlob</code>
+ +168 + + + + + + +
         * extension.
+ +169 + + + + + + +
         *
+ +170 + + + + + + +
         * <p>Note: If the client does not support the <code>largeBlob</code> extension, this
+ +171 + + + + + + +
         * requirement MAY be ignored.
+ +172 + + + + + + +
         *
+ +173 + + + + + + +
         * <p>Note: CTAP authenticators only support <code>largeBlob</code> in combination with
+ +174 + + + + + + +
         * {@link AuthenticatorSelectionCriteria#getResidentKey()} set to <code>REQUIRED</code> in
+ +175 + + + + + + +
         * {@link StartRegistrationOptions#getAuthenticatorSelection()}.
+ +176 + + + + + + +
         *
+ +177 + + + + + + +
         * @see <a
+ +178 + + + + + + +
         *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +179 + + + + + + +
         *     Large blob storage extension (largeBlob)</a>
+ +180 + + + + + + +
         */
+ +181 + + + + + + +
        public static final LargeBlobSupport REQUIRED = new LargeBlobSupport("required");
+ +182 + + + + + + +
+ +183 + + + + + + +
        /**
+ +184 + + + + + + +
         * If the authenticator used for registration supports the <code>largeBlob</code> extension,
+ +185 + + + + + + +
         * it will be enabled for the created credential. If not supported, the credential will be
+ +186 + + + + + + +
         * created without large blob support.
+ +187 + + + + + + +
         *
+ +188 + + + + + + +
         * <p>Note: CTAP authenticators only support <code>largeBlob</code> in combination with
+ +189 + + + + + + +
         * {@link AuthenticatorSelectionCriteria#getResidentKey()} set to <code>REQUIRED</code> in
+ +190 + + + + + + +
         * {@link StartRegistrationOptions#getAuthenticatorSelection()}.
+ +191 + + + + + + +
         *
+ +192 + + + + + + +
         * @see <a
+ +193 + + + + + + +
         *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +194 + + + + + + +
         *     Large blob storage extension (largeBlob)</a>
+ +195 + + + + + + +
         */
+ +196 + + + + + + +
        public static final LargeBlobSupport PREFERRED = new LargeBlobSupport("preferred");
+ +197 + + + + + + +
+ +198 + + + + + + +
        /**
+ +199 + + + + + + +
         * The underlying string value of this {@link LargeBlobSupport} value.
+ +200 + + + + + + +
         *
+ +201 + + + + + + +
         * @see #REQUIRED
+ +202 + + + + + + +
         * @see #PREFERRED
+ +203 + + + + + + +
         */
+ +204 + + + + + + +
        @JsonValue private final String value;
+ +205 + + + + + + +
+ +206 + + + + + + +
        /**
+ +207 + + + + + + +
         * Returns a new {@link Set} containing the {@link #REQUIRED} and {@link #PREFERRED} values.
+ +208 + + + + + + +
         */
+ +209 + + + + + + +
        public static Set<LargeBlobSupport> values() {
+ +210 + + +1 + +1. values : replaced return value with Collections.emptySet for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationInput$LargeBlobSupport::values → KILLED
+ +
+
+
          return Stream.of(REQUIRED, PREFERRED).collect(Collectors.toSet());
+ +211 + + + + + + +
        }
+ +212 + + + + + + +
      }
+ +213 + + + + + + +
    }
+ +214 + + + + + + +
+ +215 + + + + + + +
    /**
+ +216 + + + + + + +
     * Extension inputs for the Large blob storage extension (<code>largeBlob</code>) in
+ +217 + + + + + + +
     * authentication ceremonies.
+ +218 + + + + + + +
     *
+ +219 + + + + + + +
     * <p>Use the {@link #read()} and {@link #write(ByteArray)} factory functions to construct this
+ +220 + + + + + + +
     * type.
+ +221 + + + + + + +
     *
+ +222 + + + + + + +
     * @see <a
+ +223 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +224 + + + + + + +
     *     Large blob storage extension (largeBlob)</a>
+ +225 + + + + + + +
     */
+ +226 + + + + + + +
    @Value
+ +227 + + + + + + +
    public static class LargeBlobAuthenticationInput {
+ +228 + + + + + + +
      /**
+ +229 + + + + + + +
       * If <code>true</code>, indicates that the Relying Party would like to fetch the
+ +230 + + + + + + +
       * previously-written blob associated with the asserted credential.
+ +231 + + + + + + +
       *
+ +232 + + + + + + +
       * @see #read()
+ +233 + + + + + + +
       * @see <a
+ +234 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticationextensionslargeblobinputs-read">§10.5.
+ +235 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +236 + + + + + + +
       */
+ +237 + + + + + + +
      @JsonProperty private final boolean read;
+ +238 + + + + + + +
+ +239 + + + + + + +
      /**
+ +240 + + + + + + +
       * An opaque byte string that the Relying Party wishes to store with the existing credential.
+ +241 + + + + + + +
       *
+ +242 + + + + + + +
       * @see #write(ByteArray)
+ +243 + + + + + + +
       * @see <a
+ +244 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticationextensionslargeblobinputs-write">§10.5.
+ +245 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +246 + + + + + + +
       */
+ +247 + + + + + + +
      @JsonProperty private final ByteArray write;
+ +248 + + + + + + +
+ +249 + + + + + + +
      @JsonCreator
+ +250 + + + + + + +
      private LargeBlobAuthenticationInput(
+ +251 + + + + + + +
          @JsonProperty("read") final Boolean read, @JsonProperty("write") final ByteArray write) {
+ +252 + + +3 + +1. <init> : negated conditional → KILLED
+2. <init> : negated conditional → KILLED
+3. <init> : negated conditional → KILLED
+ +
+
+
        if (read != null && read && write != null) {
+ +253 + + + + + + +
          throw new IllegalArgumentException(
+ +254 + + + + + + +
              "Parameters \"read\" and \"write\" of largeBlob extension must not both be present.");
+ +255 + + + + + + +
        }
+ +256 + + + + + + +
+ +257 + + +2 + +1. <init> : negated conditional → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
        this.read = read != null && read;
+ +258 + + + + + + +
        this.write = write;
+ +259 + + + + + + +
      }
+ +260 + + + + + + +
+ +261 + + + + + + +
      /**
+ +262 + + + + + + +
       * Configure the Large blob storage extension (<code>largeBlob</code>) to fetch the
+ +263 + + + + + + +
       * previously-written blob associated with the asserted credential.
+ +264 + + + + + + +
       *
+ +265 + + + + + + +
       * <p>Mutually exclusive with {@link #write(ByteArray)}.
+ +266 + + + + + + +
       *
+ +267 + + + + + + +
       * @see <a
+ +268 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticationextensionslargeblobinputs-read">§10.5.
+ +269 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +270 + + + + + + +
       */
+ +271 + + + + + + +
      public static LargeBlobAuthenticationInput read() {
+ +272 + + +1 + +1. read : replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::read → KILLED
+ +
+
+
        return new LargeBlobAuthenticationInput(true, null);
+ +273 + + + + + + +
      }
+ +274 + + + + + + +
+ +275 + + + + + + +
      /**
+ +276 + + + + + + +
       * Configure the Large blob storage extension (<code>largeBlob</code>) to store the given byte
+ +277 + + + + + + +
       * array with the existing credential.
+ +278 + + + + + + +
       *
+ +279 + + + + + + +
       * <p>Mutually exclusive with {@link #read()}.
+ +280 + + + + + + +
       *
+ +281 + + + + + + +
       * @see <a
+ +282 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticationextensionslargeblobinputs-write">§10.5.
+ +283 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +284 + + + + + + +
       */
+ +285 + + +1 + +1. write : negated conditional → KILLED
+ +
+
+
      public static LargeBlobAuthenticationInput write(@NonNull final ByteArray write) {
+ +286 + + +1 + +1. write : replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::write → SURVIVED
+ +
+
+
        return new LargeBlobAuthenticationInput(false, write);
+ +287 + + + + + + +
      }
+ +288 + + + + + + +
+ +289 + + + + + + +
      /**
+ +290 + + + + + + +
       * @return <code>true</code> if the <code>read</code> property is set to <code>true</code>,
+ +291 + + + + + + +
       *     <code>false</code> otherwise.
+ +292 + + + + + + +
       * @see #read()
+ +293 + + + + + + +
       * @see <a
+ +294 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticationextensionslargeblobinputs-read">§10.5.
+ +295 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +296 + + + + + + +
       */
+ +297 + + + + + + +
      public boolean getRead() {
+ +298 + + +2 + +1. getRead : replaced boolean return with true for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getRead → KILLED
+2. getRead : replaced boolean return with false for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getRead → KILLED
+ +
+
+
        return read;
+ +299 + + + + + + +
      }
+ +300 + + + + + + +
+ +301 + + + + + + +
      /**
+ +302 + + + + + + +
       * @return The value of the <code>write</code> property if configured, empty otherwise.
+ +303 + + + + + + +
       * @see #write(ByteArray)
+ +304 + + + + + + +
       * @see <a
+ +305 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticationextensionslargeblobinputs-read">§10.5.
+ +306 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +307 + + + + + + +
       */
+ +308 + + + + + + +
      public Optional<ByteArray> getWrite() {
+ +309 + + +1 + +1. getWrite : replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getWrite → SURVIVED
+ +
+
+
        return Optional.ofNullable(write);
+ +310 + + + + + + +
      }
+ +311 + + + + + + +
    }
+ +312 + + + + + + +
+ +313 + + + + + + +
    /**
+ +314 + + + + + + +
     * Extension outputs for the Large blob storage extension (<code>largeBlob</code>) in
+ +315 + + + + + + +
     * registration ceremonies.
+ +316 + + + + + + +
     *
+ +317 + + + + + + +
     * <p>Use the {@link #supported(boolean)} factory function to construct this type.
+ +318 + + + + + + +
     *
+ +319 + + + + + + +
     * @see <a
+ +320 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +321 + + + + + + +
     *     Large blob storage extension (largeBlob)</a>
+ +322 + + + + + + +
     */
+ +323 + + + + + + +
    @Value
+ +324 + + + + + + +
    public static class LargeBlobRegistrationOutput {
+ +325 + + + + + + +
      /**
+ +326 + + + + + + +
       * <code>true</code> if, and only if, the created credential supports storing large blobs.
+ +327 + + + + + + +
       *
+ +328 + + + + + + +
       * @see <a
+ +329 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticationextensionslargebloboutputs-supported">§10.5.
+ +330 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +331 + + + + + + +
       * @see LargeBlobRegistrationInput#getSupport()
+ +332 + + + + + + +
       */
+ +333 + + + + + + +
      @JsonProperty private final boolean supported;
+ +334 + + + + + + +
+ +335 + + + + + + +
      @JsonCreator
+ +336 + + + + + + +
      private LargeBlobRegistrationOutput(@JsonProperty("supported") boolean supported) {
+ +337 + + + + + + +
        this.supported = supported;
+ +338 + + + + + + +
      }
+ +339 + + + + + + +
+ +340 + + + + + + +
      /**
+ +341 + + + + + + +
       * Create a Large blob storage extension output with the <code>supported</code> output set to
+ +342 + + + + + + +
       * the given value.
+ +343 + + + + + + +
       *
+ +344 + + + + + + +
       * @see <a
+ +345 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-authenticationextensionslargebloboutputs">
+ +346 + + + + + + +
       *     dictionary AuthenticationExtensionsLargeBlobOutputs</a>
+ +347 + + + + + + +
       */
+ +348 + + + + + + +
      public static LargeBlobRegistrationOutput supported(boolean supported) {
+ +349 + + +1 + +1. supported : replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationOutput::supported → KILLED
+ +
+
+
        return new LargeBlobRegistrationOutput(supported);
+ +350 + + + + + + +
      }
+ +351 + + + + + + +
    }
+ +352 + + + + + + +
+ +353 + + + + + + +
    /**
+ +354 + + + + + + +
     * Extension outputs for the Large blob storage extension (<code>largeBlob</code>) in
+ +355 + + + + + + +
     * authentication ceremonies.
+ +356 + + + + + + +
     *
+ +357 + + + + + + +
     * @see <a
+ +358 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +359 + + + + + + +
     *     Large blob storage extension (largeBlob)</a>
+ +360 + + + + + + +
     */
+ +361 + + + + + + +
    @Value
+ +362 + + + + + + +
    public static class LargeBlobAuthenticationOutput {
+ +363 + + + + + + +
      @JsonProperty private final ByteArray blob;
+ +364 + + + + + + +
      @JsonProperty private final Boolean written;
+ +365 + + + + + + +
+ +366 + + + + + + +
      @JsonCreator
+ +367 + + + + + + +
      private LargeBlobAuthenticationOutput(
+ +368 + + + + + + +
          @JsonProperty("blob") ByteArray blob, @JsonProperty("written") Boolean written) {
+ +369 + + + + + + +
        this.blob = blob;
+ +370 + + + + + + +
        this.written = written;
+ +371 + + + + + + +
      }
+ +372 + + + + + + +
+ +373 + + + + + + +
      /**
+ +374 + + + + + + +
       * Create a Large blob storage extension output with the <code>blob</code> output set to the
+ +375 + + + + + + +
       * given value.
+ +376 + + + + + + +
       *
+ +377 + + + + + + +
       * <p>This corresponds to the extension input {@link LargeBlobAuthenticationInput#read()
+ +378 + + + + + + +
       * LargeBlobAuthenticationInput.read()}.
+ +379 + + + + + + +
       *
+ +380 + + + + + + +
       * @see <a
+ +381 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-authenticationextensionslargebloboutputs">
+ +382 + + + + + + +
       *     dictionary AuthenticationExtensionsLargeBlobOutputs</a>
+ +383 + + + + + + +
       */
+ +384 + + + + + + +
      public static LargeBlobAuthenticationOutput read(final ByteArray blob) {
+ +385 + + +1 + +1. read : replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::read → KILLED
+ +
+
+
        return new LargeBlobAuthenticationOutput(blob, null);
+ +386 + + + + + + +
      }
+ +387 + + + + + + +
+ +388 + + + + + + +
      /**
+ +389 + + + + + + +
       * Create a Large blob storage extension output with the <code>written</code> output set to
+ +390 + + + + + + +
       * the given value.
+ +391 + + + + + + +
       *
+ +392 + + + + + + +
       * <p>This corresponds to the extension input {@link
+ +393 + + + + + + +
       * LargeBlobAuthenticationInput#write(ByteArray)
+ +394 + + + + + + +
       * LargeBlobAuthenticationInput.write(ByteArray)}.
+ +395 + + + + + + +
       *
+ +396 + + + + + + +
       * @see <a
+ +397 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-authenticationextensionslargebloboutputs">
+ +398 + + + + + + +
       *     dictionary AuthenticationExtensionsLargeBlobOutputs</a>
+ +399 + + + + + + +
       */
+ +400 + + + + + + +
      public static LargeBlobAuthenticationOutput write(final boolean write) {
+ +401 + + +1 + +1. write : replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::write → KILLED
+ +
+
+
        return new LargeBlobAuthenticationOutput(null, write);
+ +402 + + + + + + +
      }
+ +403 + + + + + + +
+ +404 + + + + + + +
      /**
+ +405 + + + + + + +
       * The opaque byte string that was associated with the credential identified by {@link
+ +406 + + + + + + +
       * PublicKeyCredential#getId()}. Only valid if {@link LargeBlobAuthenticationInput#getRead()}
+ +407 + + + + + + +
       * was <code>true</code>.
+ +408 + + + + + + +
       *
+ +409 + + + + + + +
       * @return A present {@link Optional} if {@link LargeBlobAuthenticationInput#getRead()} was
+ +410 + + + + + + +
       *     <code>true</code> and the blob content was successfully read. Otherwise (if {@link
+ +411 + + + + + + +
       *     LargeBlobAuthenticationInput#getRead()} was <code>false</code> or the content failed to
+ +412 + + + + + + +
       *     be read) an empty {@link Optional}.
+ +413 + + + + + + +
       * @see <a
+ +414 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticationextensionslargebloboutputs-blob">§10.5.
+ +415 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +416 + + + + + + +
       */
+ +417 + + + + + + +
      public Optional<ByteArray> getBlob() {
+ +418 + + +1 + +1. getBlob : replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::getBlob → KILLED
+ +
+
+
        return Optional.ofNullable(blob);
+ +419 + + + + + + +
      }
+ +420 + + + + + + +
+ +421 + + + + + + +
      /**
+ +422 + + + + + + +
       * A boolean that indicates that the contents of {@link
+ +423 + + + + + + +
       * LargeBlob.LargeBlobAuthenticationInput#write(ByteArray)
+ +424 + + + + + + +
       * LargeBlobAuthenticationInput#write(ByteArray)} were successfully stored on the
+ +425 + + + + + + +
       * authenticator, associated with the specified credential.
+ +426 + + + + + + +
       *
+ +427 + + + + + + +
       * @return Empty if {@link LargeBlobAuthenticationInput#getWrite()} was not present. Otherwise
+ +428 + + + + + + +
       *     <code>true</code> if and only if the value of {@link
+ +429 + + + + + + +
       *     LargeBlobAuthenticationInput#getWrite()} was successfully stored by the authenticator.
+ +430 + + + + + + +
       * @see <a
+ +431 + + + + + + +
       *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticationextensionslargebloboutputs-written">§10.5.
+ +432 + + + + + + +
       *     Large blob storage extension (largeBlob)</a>
+ +433 + + + + + + +
       */
+ +434 + + + + + + +
      public Optional<Boolean> getWritten() {
+ +435 + + +1 + +1. getWritten : replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::getWritten → KILLED
+ +
+
+
        return Optional.ofNullable(written);
+ +436 + + + + + + +
      }
+ +437 + + + + + + +
    }
+ +438 + + + + + + +
  }
+ +439 + + + + + + +
+ +440 + + + + + + +
  /**
+ +441 + + + + + + +
   * Definitions for the User Verification Method (<code>uvm</code>) Extension.
+ +442 + + + + + + +
   *
+ +443 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">§10.3.
+ +444 + + + + + + +
   *     User Verification Method Extension (uvm)</a>
+ +445 + + + + + + +
   */
+ +446 + + + + + + +
  public static class Uvm {
+ +447 + + + + + + +
    static final String EXTENSION_ID = "uvm";
+ +448 + + + + + + +
+ +449 + + + + + + +
    /**
+ +450 + + + + + + +
     * A <code>uvmEntry</code> as defined in <a
+ +451 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">§10.3. User
+ +452 + + + + + + +
     * Verification Method Extension (uvm)</a>.
+ +453 + + + + + + +
     *
+ +454 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">§10.3.
+ +455 + + + + + + +
     *     User Verification Method Extension (uvm)</a>
+ +456 + + + + + + +
     * @see UserVerificationMethod
+ +457 + + + + + + +
     * @see KeyProtectionType
+ +458 + + + + + + +
     * @see MatcherProtectionType
+ +459 + + + + + + +
     */
+ +460 + + + + + + +
    @Value
+ +461 + + + + + + +
    public static class UvmEntry {
+ +462 + + + + + + +
      private final UserVerificationMethod userVerificationMethod;
+ +463 + + + + + + +
      private final KeyProtectionType keyProtectionType;
+ +464 + + + + + + +
      private final MatcherProtectionType matcherProtectionType;
+ +465 + + + + + + +
+ +466 + + + + + + +
      public UvmEntry(
+ +467 + + + + + + +
          @JsonProperty("userVerificationMethod") UserVerificationMethod userVerificationMethod,
+ +468 + + + + + + +
          @JsonProperty("keyProtectionType") KeyProtectionType keyProtectionType,
+ +469 + + + + + + +
          @JsonProperty("matcherProtectionType") MatcherProtectionType matcherProtectionType) {
+ +470 + + + + + + +
        this.userVerificationMethod = userVerificationMethod;
+ +471 + + + + + + +
        this.keyProtectionType = keyProtectionType;
+ +472 + + + + + + +
        this.matcherProtectionType = matcherProtectionType;
+ +473 + + + + + + +
      }
+ +474 + + + + + + +
    }
+ +475 + + + + + + +
+ +476 + + + + + + +
    static Optional<List<UvmEntry>> parseAuthenticatorExtensionOutput(CBORObject cbor) {
+ +477 + + +1 + +1. parseAuthenticatorExtensionOutput : negated conditional → KILLED
+ +
+
+
      if (validateAuthenticatorExtensionOutput(cbor)) {
+ +478 + + +1 + +1. parseAuthenticatorExtensionOutput : replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$Uvm::parseAuthenticatorExtensionOutput → KILLED
+ +
+
+
        return Optional.of(
+ +479 + + + + + + +
            cbor.get(EXTENSION_ID).getValues().stream()
+ +480 + + + + + + +
                .map(
+ +481 + + + + + + +
                    uvmEntry ->
+ +482 + + +1 + +1. lambda$parseAuthenticatorExtensionOutput$0 : replaced return value with null for com/yubico/webauthn/data/Extensions$Uvm::lambda$parseAuthenticatorExtensionOutput$0 → KILLED
+ +
+
+
                        new UvmEntry(
+ +483 + + + + + + +
                            UserVerificationMethod.fromValue(uvmEntry.get(0).AsInt32Value()),
+ +484 + + + + + + +
                            KeyProtectionType.fromValue(
+ +485 + + + + + + +
                                uvmEntry.get(1).AsNumber().ToInt16IfExact()),
+ +486 + + + + + + +
                            MatcherProtectionType.fromValue(
+ +487 + + + + + + +
                                uvmEntry.get(2).AsNumber().ToInt16IfExact())))
+ +488 + + + + + + +
                .collect(Collectors.toList()));
+ +489 + + + + + + +
      } else {
+ +490 + + + + + + +
        return Optional.empty();
+ +491 + + + + + + +
      }
+ +492 + + + + + + +
    }
+ +493 + + + + + + +
+ +494 + + + + + + +
    private static boolean validateAuthenticatorExtensionOutput(CBORObject extensions) {
+ +495 + + +1 + +1. validateAuthenticatorExtensionOutput : negated conditional → KILLED
+ +
+
+
      if (!extensions.ContainsKey(EXTENSION_ID)) {
+ +496 + + +1 + +1. validateAuthenticatorExtensionOutput : replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE
+ +
+
+
        return false;
+ +497 + + + + + + +
      }
+ +498 + + + + + + +
+ +499 + + + + + + +
      CBORObject uvm = extensions.get(EXTENSION_ID);
+ +500 + + +1 + +1. validateAuthenticatorExtensionOutput : negated conditional → KILLED
+ +
+
+
      if (uvm.getType() != CBORType.Array) {
+ +501 + + + + + + +
        log.debug(
+ +502 + + + + + + +
            "Invalid CBOR type for \"{}\" extension output: expected array, was: {}",
+ +503 + + + + + + +
            EXTENSION_ID,
+ +504 + + + + + + +
            uvm.getType());
+ +505 + + +1 + +1. validateAuthenticatorExtensionOutput : replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE
+ +
+
+
        return false;
+ +506 + + + + + + +
      }
+ +507 + + + + + + +
+ +508 + + +4 + +1. validateAuthenticatorExtensionOutput : changed conditional boundary → SURVIVED
+2. validateAuthenticatorExtensionOutput : changed conditional boundary → SURVIVED
+3. validateAuthenticatorExtensionOutput : negated conditional → KILLED
+4. validateAuthenticatorExtensionOutput : negated conditional → KILLED
+ +
+
+
      if (uvm.size() < 1 || uvm.size() > 3) {
+ +509 + + + + + + +
        log.debug(
+ +510 + + + + + + +
            "Invalid length \"{}\" extension output array: expected 1 to 3 (inclusive), was: {}",
+ +511 + + + + + + +
            EXTENSION_ID,
+ +512 + + + + + + +
            uvm.size());
+ +513 + + +1 + +1. validateAuthenticatorExtensionOutput : replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE
+ +
+
+
        return false;
+ +514 + + + + + + +
      }
+ +515 + + + + + + +
+ +516 + + + + + + +
      for (CBORObject entry : uvm.getValues()) {
+ +517 + + +1 + +1. validateAuthenticatorExtensionOutput : negated conditional → KILLED
+ +
+
+
        if (entry.getType() != CBORType.Array) {
+ +518 + + + + + + +
          log.debug("Invalid CBOR type for uvmEntry: expected array, was: {}", entry.getType());
+ +519 + + +1 + +1. validateAuthenticatorExtensionOutput : replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE
+ +
+
+
          return false;
+ +520 + + + + + + +
        }
+ +521 + + + + + + +
+ +522 + + +1 + +1. validateAuthenticatorExtensionOutput : negated conditional → KILLED
+ +
+
+
        if (entry.size() != 3) {
+ +523 + + + + + + +
          log.debug("Invalid length for uvmEntry: expected 3, was: {}", entry.size());
+ +524 + + +1 + +1. validateAuthenticatorExtensionOutput : replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE
+ +
+
+
          return false;
+ +525 + + + + + + +
        }
+ +526 + + + + + + +
+ +527 + + + + + + +
        for (CBORObject i : entry.getValues()) {
+ +528 + + +2 + +1. validateAuthenticatorExtensionOutput : negated conditional → KILLED
+2. validateAuthenticatorExtensionOutput : negated conditional → KILLED
+ +
+
+
          if (!(i.isNumber() && i.AsNumber().IsInteger())) {
+ +529 + + + + + + +
            log.debug("Invalid type for uvmEntry element: expected integer, was: {}", i.getType());
+ +530 + + +1 + +1. validateAuthenticatorExtensionOutput : replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE
+ +
+
+
            return false;
+ +531 + + + + + + +
          }
+ +532 + + + + + + +
        }
+ +533 + + + + + + +
      }
+ +534 + + + + + + +
+ +535 + + +1 + +1. validateAuthenticatorExtensionOutput : replaced boolean return with false for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → KILLED
+ +
+
+
      return true;
+ +536 + + + + + + +
    }
+ +537 + + + + + + +
  }
+ +538 + + + + + + +
}

Mutations

104 + + + +

1.1
Location : getRk
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$CredentialProperties$CredentialPropertiesOutput::getRk → KILLED

+
210 + + + +

1.1
Location : values
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Collections.emptySet for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationInput$LargeBlobSupport::values → KILLED

+
252 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

3.3
Location : <init>
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
257 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
272 + + + +

1.1
Location : read
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::read → KILLED

+
285 + + + +

1.1
Location : write
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
286 + + + +

1.1
Location : write
Killed by : none
replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::write → SURVIVED

+
298 + + + +

1.1
Location : getRead
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced boolean return with true for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getRead → KILLED

2.2
Location : getRead
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced boolean return with false for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getRead → KILLED

+
309 + + + +

1.1
Location : getWrite
Killed by : none
replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getWrite → SURVIVED

+
349 + + + +

1.1
Location : supported
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationOutput::supported → KILLED

+
385 + + + +

1.1
Location : read
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::read → KILLED

+
401 + + + +

1.1
Location : write
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::write → KILLED

+
418 + + + +

1.1
Location : getBlob
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::getBlob → KILLED

+
435 + + + +

1.1
Location : getWritten
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::getWritten → KILLED

+
477 + + + +

1.1
Location : parseAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
478 + + + +

1.1
Location : parseAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$Uvm::parseAuthenticatorExtensionOutput → KILLED

+
482 + + + +

1.1
Location : lambda$parseAuthenticatorExtensionOutput$0
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with null for com/yubico/webauthn/data/Extensions$Uvm::lambda$parseAuthenticatorExtensionOutput$0 → KILLED

+
495 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
496 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : none
replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE

+
500 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
505 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : none
replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE

+
508 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : none
changed conditional boundary → SURVIVED

2.2
Location : validateAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

3.3
Location : validateAuthenticatorExtensionOutput
Killed by : none
changed conditional boundary → SURVIVED

4.4
Location : validateAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
513 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : none
replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE

+
517 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
519 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : none
replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE

+
522 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
524 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : none
replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE

+
528 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

2.2
Location : validateAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
530 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : none
replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → NO_COVERAGE

+
535 + + + +

1.1
Location : validateAuthenticatorExtensionOutput
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with false for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredential.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredential.java.html new file mode 100644 index 000000000..20242154f --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredential.java.html @@ -0,0 +1,4711 @@ + + + + + + + + + +

PublicKeyCredential.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import com.fasterxml.jackson.core.type.TypeReference;
+ +30 + + + + + + +
import com.yubico.internal.util.JacksonCodecs;
+ +31 + + + + + + +
import com.yubico.webauthn.AssertionResult;
+ +32 + + + + + + +
import com.yubico.webauthn.FinishAssertionOptions;
+ +33 + + + + + + +
import com.yubico.webauthn.FinishRegistrationOptions;
+ +34 + + + + + + +
import com.yubico.webauthn.RegistrationResult;
+ +35 + + + + + + +
import com.yubico.webauthn.RelyingParty;
+ +36 + + + + + + +
import java.io.IOException;
+ +37 + + + + + + +
import java.util.Optional;
+ +38 + + + + + + +
import lombok.AllArgsConstructor;
+ +39 + + + + + + +
import lombok.Builder;
+ +40 + + + + + + +
import lombok.NonNull;
+ +41 + + + + + + +
import lombok.Value;
+ +42 + + + + + + +
+ +43 + + + + + + +
/**
+ +44 + + + + + + +
 * The PublicKeyCredential interface inherits from Credential <a
+ +45 + + + + + + +
 * href="https://www.w3.org/TR/credential-management-1/">[CREDENTIAL-MANAGEMENT-1]</a>, and contains
+ +46 + + + + + + +
 * the attributes that are returned to the caller when a new credential is created, or a new
+ +47 + + + + + + +
 * assertion is requested.
+ +48 + + + + + + +
 *
+ +49 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#iface-pkcredential">§5.1.
+ +50 + + + + + + +
 *     PublicKeyCredential Interface</a>
+ +51 + + + + + + +
 */
+ +52 + + + + + + +
@Value
+ +53 + + + + + + +
@Builder(toBuilder = true)
+ +54 + + + + + + +
public class PublicKeyCredential<
+ +55 + + + + + + +
    A extends AuthenticatorResponse, B extends ClientExtensionOutputs> {
+ +56 + + + + + + +
+ +57 + + + + + + +
  /**
+ +58 + + + + + + +
   * The raw Credential ID of this credential, corresponding to the <code>rawId</code> attribute in
+ +59 + + + + + + +
   * the WebAuthn API.
+ +60 + + + + + + +
   */
+ +61 + + + + + + +
  @NonNull private final ByteArray id;
+ +62 + + + + + + +
+ +63 + + + + + + +
  /**
+ +64 + + + + + + +
   * The authenticator's response to the client’s request to either create a public key credential,
+ +65 + + + + + + +
   * or generate an authentication assertion.
+ +66 + + + + + + +
   *
+ +67 + + + + + + +
   * <p>If the {@link PublicKeyCredential} was created in response to <code>
+ +68 + + + + + + +
   * navigator.credentials.create()</code>, this attribute’s value will be an {@link
+ +69 + + + + + + +
   * AuthenticatorAttestationResponse}, otherwise, the {@link PublicKeyCredential} was created in
+ +70 + + + + + + +
   * response to <code>navigator.credentials.get()</code>, and this attribute’s value will be an
+ +71 + + + + + + +
   * {@link AuthenticatorAssertionResponse}.
+ +72 + + + + + + +
   */
+ +73 + + + + + + +
  @NonNull private final A response;
+ +74 + + + + + + +
+ +75 + + + + + + +
  private final AuthenticatorAttachment authenticatorAttachment;
+ +76 + + + + + + +
+ +77 + + + + + + +
  /**
+ +78 + + + + + + +
   * A map containing extension identifier → client extension output entries produced by the
+ +79 + + + + + + +
   * extension’s client extension processing.
+ +80 + + + + + + +
   */
+ +81 + + + + + + +
  @NonNull private final B clientExtensionResults;
+ +82 + + + + + + +
+ +83 + + + + + + +
  /** The {@link PublicKeyCredential}'s type value is the string "public-key". */
+ +84 + + + + + + +
  @NonNull @Builder.Default
+ +85 + + + + + + +
  private final PublicKeyCredentialType type = PublicKeyCredentialType.PUBLIC_KEY;
+ +86 + + + + + + +
+ +87 + + + + + + +
  @JsonCreator
+ +88 + + + + + + +
  private PublicKeyCredential(
+ +89 + + + + + + +
      @JsonProperty("id") ByteArray id,
+ +90 + + + + + + +
      @JsonProperty("rawId") ByteArray rawId,
+ +91 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("response") A response,
+ +92 + + + + + + +
      @JsonProperty("authenticatorAttachment") AuthenticatorAttachment authenticatorAttachment,
+ +93 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("clientExtensionResults") B clientExtensionResults,
+ +94 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("type") PublicKeyCredentialType type) {
+ +95 + + +2 + +1. <init> : negated conditional → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
    if (id == null && rawId == null) {
+ +96 + + + + + + +
      throw new NullPointerException("At least one of \"id\" and \"rawId\" must be non-null.");
+ +97 + + + + + + +
    }
+ +98 + + +3 + +1. <init> : negated conditional → KILLED
+2. <init> : negated conditional → KILLED
+3. <init> : negated conditional → KILLED
+ +
+
+
    if (id != null && rawId != null && !id.equals(rawId)) {
+ +99 + + + + + + +
      throw new IllegalArgumentException(
+ +100 + + + + + + +
          String.format("\"id\" and \"rawId\" are not equal: %s != %s", id, rawId));
+ +101 + + + + + + +
    }
+ +102 + + + + + + +
+ +103 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    this.id = id == null ? rawId : id;
+ +104 + + + + + + +
    this.response = response;
+ +105 + + + + + + +
    this.authenticatorAttachment = authenticatorAttachment;
+ +106 + + + + + + +
    this.clientExtensionResults = clientExtensionResults;
+ +107 + + + + + + +
    this.type = type;
+ +108 + + + + + + +
  }
+ +109 + + + + + + +
+ +110 + + + + + + +
  private PublicKeyCredential(
+ +111 + + + + + + +
      ByteArray id,
+ +112 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull A response,
+ +113 + + + + + + +
      AuthenticatorAttachment authenticatorAttachment,
+ +114 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull B clientExtensionResults,
+ +115 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull PublicKeyCredentialType type) {
+ +116 + + + + + + +
    this(id, null, response, authenticatorAttachment, clientExtensionResults, type);
+ +117 + + + + + + +
  }
+ +118 + + + + + + +
+ +119 + + + + + + +
  /**
+ +120 + + + + + + +
   * The <a href="https://w3c.github.io/webauthn/#authenticator-attachment-modality">authenticator
+ +121 + + + + + + +
   * attachment modality</a> in effect at the time the credential was created or used.
+ +122 + + + + + + +
   *
+ +123 + + + + + + +
   * <p>If parsed from JSON, this will be present if and only if the input was a valid value of
+ +124 + + + + + + +
   * {@link AuthenticatorAttachment}.
+ +125 + + + + + + +
   *
+ +126 + + + + + + +
   * <p>The same value will also be available via {@link
+ +127 + + + + + + +
   * RegistrationResult#getAuthenticatorAttachment()} or {@link
+ +128 + + + + + + +
   * AssertionResult#getAuthenticatorAttachment()} on the result from {@link
+ +129 + + + + + + +
   * RelyingParty#finishRegistration(FinishRegistrationOptions)} or {@link
+ +130 + + + + + + +
   * RelyingParty#finishAssertion(FinishAssertionOptions)}.
+ +131 + + + + + + +
   *
+ +132 + + + + + + +
   * @see RegistrationResult#getAuthenticatorAttachment()
+ +133 + + + + + + +
   * @see AssertionResult#getAuthenticatorAttachment()
+ +134 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +135 + + + + + + +
   *     the standard matures.
+ +136 + + + + + + +
   */
+ +137 + + + + + + +
  @Deprecated
+ +138 + + + + + + +
  public Optional<AuthenticatorAttachment> getAuthenticatorAttachment() {
+ +139 + + +1 + +1. getAuthenticatorAttachment : replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredential::getAuthenticatorAttachment → KILLED
+ +
+
+
    return Optional.ofNullable(authenticatorAttachment);
+ +140 + + + + + + +
  }
+ +141 + + + + + + +
+ +142 + + + + + + +
  public static <A extends AuthenticatorResponse, B extends ClientExtensionOutputs>
+ +143 + + + + + + +
      PublicKeyCredentialBuilder<A, B>.MandatoryStages builder() {
+ +144 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::builder → KILLED
+ +
+
+
    return new PublicKeyCredentialBuilder<A, B>().start();
+ +145 + + + + + + +
  }
+ +146 + + + + + + +
+ +147 + + + + + + +
  public static class PublicKeyCredentialBuilder<
+ +148 + + + + + + +
      A extends AuthenticatorResponse, B extends ClientExtensionOutputs> {
+ +149 + + + + + + +
    private MandatoryStages start() {
+ +150 + + +1 + +1. start : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder::start → KILLED
+ +
+
+
      return new MandatoryStages(this);
+ +151 + + + + + + +
    }
+ +152 + + + + + + +
+ +153 + + + + + + +
    @AllArgsConstructor
+ +154 + + + + + + +
    public class MandatoryStages {
+ +155 + + + + + + +
      private final PublicKeyCredentialBuilder<A, B> builder;
+ +156 + + + + + + +
+ +157 + + + + + + +
      /**
+ +158 + + + + + + +
       * {@link PublicKeyCredentialBuilder#id(ByteArray) id} is a required parameter.
+ +159 + + + + + + +
       *
+ +160 + + + + + + +
       * @see PublicKeyCredentialBuilder#id(ByteArray)
+ +161 + + + + + + +
       */
+ +162 + + + + + + +
      public Step2 id(ByteArray id) {
+ +163 + + + + + + +
        builder.id(id);
+ +164 + + +1 + +1. id : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages::id → KILLED
+ +
+
+
        return new Step2();
+ +165 + + + + + + +
      }
+ +166 + + + + + + +
+ +167 + + + + + + +
      public class Step2 {
+ +168 + + + + + + +
        /**
+ +169 + + + + + + +
         * {@link PublicKeyCredentialBuilder#response(AuthenticatorResponse) response} is a required
+ +170 + + + + + + +
         * parameter.
+ +171 + + + + + + +
         *
+ +172 + + + + + + +
         * @see PublicKeyCredentialBuilder#response(AuthenticatorResponse)
+ +173 + + + + + + +
         */
+ +174 + + + + + + +
        public Step3 response(A response) {
+ +175 + + + + + + +
          builder.response(response);
+ +176 + + +1 + +1. response : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step2::response → KILLED
+ +
+
+
          return new Step3();
+ +177 + + + + + + +
        }
+ +178 + + + + + + +
      }
+ +179 + + + + + + +
+ +180 + + + + + + +
      public class Step3 {
+ +181 + + + + + + +
        /**
+ +182 + + + + + + +
         * {@link PublicKeyCredentialBuilder#clientExtensionResults(ClientExtensionOutputs)
+ +183 + + + + + + +
         * clientExtensionResults} is a required parameter.
+ +184 + + + + + + +
         *
+ +185 + + + + + + +
         * @see PublicKeyCredentialBuilder#clientExtensionResults(ClientExtensionOutputs)
+ +186 + + + + + + +
         */
+ +187 + + + + + + +
        public PublicKeyCredentialBuilder<A, B> clientExtensionResults(B clientExtensionResults) {
+ +188 + + +1 + +1. clientExtensionResults : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step3::clientExtensionResults → KILLED
+ +
+
+
          return builder.clientExtensionResults(clientExtensionResults);
+ +189 + + + + + + +
        }
+ +190 + + + + + + +
      }
+ +191 + + + + + + +
    }
+ +192 + + + + + + +
  }
+ +193 + + + + + + +
+ +194 + + + + + + +
  /**
+ +195 + + + + + + +
   * Parse a {@link PublicKeyCredential} object from JSON.
+ +196 + + + + + + +
   *
+ +197 + + + + + + +
   * <p>The <code>json</code> should be of the following format:
+ +198 + + + + + + +
   *
+ +199 + + + + + + +
   * <pre>
+ +200 + + + + + + +
   * {
+ +201 + + + + + + +
   *   "id": "(resp.id)",
+ +202 + + + + + + +
   *   "response": {
+ +203 + + + + + + +
   *     "attestationObject": "(Base64Url encoded resp.attestationObject)",
+ +204 + + + + + + +
   *     "clientDataJSON": "(Base64Url encoded resp.clientDataJSON)"
+ +205 + + + + + + +
   *   },
+ +206 + + + + + + +
   *   "clientExtensionResults": { (resp.getClientExtensionResults()) },
+ +207 + + + + + + +
   *   "type": "public-key"
+ +208 + + + + + + +
   * }
+ +209 + + + + + + +
   * </pre>
+ +210 + + + + + + +
   *
+ +211 + + + + + + +
   * <dl>
+ +212 + + + + + + +
   *   <dt>resp:
+ +213 + + + + + + +
   *   <dd>The <a
+ +214 + + + + + + +
   *       href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#iface-pkcredential">PublicKeyCredential</a>
+ +215 + + + + + + +
   *       object returned from a registration ceremony.
+ +216 + + + + + + +
   *   <dt>id:
+ +217 + + + + + + +
   *   <dd>The string value of <code>resp.id</code>
+ +218 + + + + + + +
   *   <dt>response.attestationObject:
+ +219 + + + + + + +
   *   <dd>The value of <code>resp.attestationObject</code>, Base64Url encoded as a string
+ +220 + + + + + + +
   *   <dt>response.clientDataJSON:
+ +221 + + + + + + +
   *   <dd>The value of <code>resp.clientDataJSON</code>, Base64Url encoded as a string
+ +222 + + + + + + +
   *   <dt>clientExtensionResults:
+ +223 + + + + + + +
   *   <dd>The return value of <code>resp.getClientExtensionResults()</code>
+ +224 + + + + + + +
   *   <dt>type:
+ +225 + + + + + + +
   *   <dd>The literal string value <code>"public-key"</code>
+ +226 + + + + + + +
   * </dl>
+ +227 + + + + + + +
   *
+ +228 + + + + + + +
   * @param json a JSON string of the above format
+ +229 + + + + + + +
   * @throws IOException if the <code>json</code> is invalid or cannot be decoded as a {@link
+ +230 + + + + + + +
   *     PublicKeyCredential}
+ +231 + + + + + + +
   */
+ +232 + + + + + + +
  public static PublicKeyCredential<
+ +233 + + + + + + +
          AuthenticatorAttestationResponse, ClientRegistrationExtensionOutputs>
+ +234 + + + + + + +
      parseRegistrationResponseJson(String json) throws IOException {
+ +235 + + +1 + +1. parseRegistrationResponseJson : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::parseRegistrationResponseJson → KILLED
+ +
+
+
    return JacksonCodecs.json()
+ +236 + + + + + + +
        .readValue(
+ +237 + + + + + + +
            json,
+ +238 + + + + + + +
            new TypeReference<
+ +239 + + + + + + +
                PublicKeyCredential<
+ +240 + + + + + + +
                    AuthenticatorAttestationResponse, ClientRegistrationExtensionOutputs>>() {});
+ +241 + + + + + + +
  }
+ +242 + + + + + + +
+ +243 + + + + + + +
  /**
+ +244 + + + + + + +
   * Parse a {@link PublicKeyCredential} object from JSON.
+ +245 + + + + + + +
   *
+ +246 + + + + + + +
   * <p>The <code>json</code> should be of the following format:
+ +247 + + + + + + +
   *
+ +248 + + + + + + +
   * <pre>
+ +249 + + + + + + +
   * {
+ +250 + + + + + + +
   *   "id": "(resp.id)",
+ +251 + + + + + + +
   *   "response": {
+ +252 + + + + + + +
   *     "authenticatorData": "(Base64Url encoded resp.authenticatorData)",
+ +253 + + + + + + +
   *     "signature": "(Base64Url encoded resp.signature)",
+ +254 + + + + + + +
   *     "clientDataJSON": "(Base64Url encoded resp.clientDataJSON)",
+ +255 + + + + + + +
   *     "userHandle": "(null, undefined or Base64Url encoded resp.userHandle)"
+ +256 + + + + + + +
   *   },
+ +257 + + + + + + +
   *   "clientExtensionResults": { (resp.getClientExtensionResults()) },
+ +258 + + + + + + +
   *   "type": "public-key"
+ +259 + + + + + + +
   * }
+ +260 + + + + + + +
   * </pre>
+ +261 + + + + + + +
   *
+ +262 + + + + + + +
   * <dl>
+ +263 + + + + + + +
   *   <dt>resp:
+ +264 + + + + + + +
   *   <dd>The <a
+ +265 + + + + + + +
   *       href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#iface-pkcredential">PublicKeyCredential</a>
+ +266 + + + + + + +
   *       object returned from an authentication ceremony.
+ +267 + + + + + + +
   *   <dt>id:
+ +268 + + + + + + +
   *   <dd>The string value of <code>resp.id</code>
+ +269 + + + + + + +
   *   <dt>response.authenticatorData:
+ +270 + + + + + + +
   *   <dd>The value of <code>resp.authenticatorData</code>, Base64Url encoded as a string
+ +271 + + + + + + +
   *   <dt>response.signature:
+ +272 + + + + + + +
   *   <dd>The value of <code>resp.signature</code>, Base64Url encoded as a string
+ +273 + + + + + + +
   *   <dt>response.clientDataJSON:
+ +274 + + + + + + +
   *   <dd>The value of <code>resp.clientDataJSON</code>, Base64Url encoded as a string
+ +275 + + + + + + +
   *   <dt>response.userHandle:
+ +276 + + + + + + +
   *   <dd>The value of <code>resp.userHandle</code> Base64Url encoded as a string if present,
+ +277 + + + + + + +
   *       otherwise <code>null</code> or <code>undefined</code>
+ +278 + + + + + + +
   *   <dt>clientExtensionResults:
+ +279 + + + + + + +
   *   <dd>The return value of <code>resp.getClientExtensionResults()</code>
+ +280 + + + + + + +
   *   <dt>type:
+ +281 + + + + + + +
   *   <dd>The literal string value <code>"public-key"</code>
+ +282 + + + + + + +
   * </dl>
+ +283 + + + + + + +
   *
+ +284 + + + + + + +
   * @param json a JSON string of the above format
+ +285 + + + + + + +
   * @throws IOException if the <code>json</code> is invalid or cannot be decoded as a {@link
+ +286 + + + + + + +
   *     PublicKeyCredential}
+ +287 + + + + + + +
   */
+ +288 + + + + + + +
  public static PublicKeyCredential<AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs>
+ +289 + + + + + + +
      parseAssertionResponseJson(String json) throws IOException {
+ +290 + + +1 + +1. parseAssertionResponseJson : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::parseAssertionResponseJson → KILLED
+ +
+
+
    return JacksonCodecs.json()
+ +291 + + + + + + +
        .readValue(
+ +292 + + + + + + +
            json,
+ +293 + + + + + + +
            new TypeReference<
+ +294 + + + + + + +
                PublicKeyCredential<
+ +295 + + + + + + +
                    AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs>>() {});
+ +296 + + + + + + +
  }
+ +297 + + + + + + +
}

Mutations

91 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
93 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
94 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
95 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.JsonIoSpec
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
98 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.JsonIoSpec
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.JsonIoSpec
negated conditional → KILLED

3.3
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
103 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
112 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
114 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
115 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
139 + + + +

1.1
Location : getAuthenticatorAttachment
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredential::getAuthenticatorAttachment → KILLED

+
144 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::builder → KILLED

+
150 + + + +

1.1
Location : start
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder::start → KILLED

+
164 + + + +

1.1
Location : id
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages::id → KILLED

+
176 + + + +

1.1
Location : response
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step2::response → KILLED

+
188 + + + +

1.1
Location : clientExtensionResults
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step3::clientExtensionResults → KILLED

+
235 + + + +

1.1
Location : parseRegistrationResponseJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::parseRegistrationResponseJson → KILLED

+
290 + + + +

1.1
Location : parseAssertionResponseJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::parseAssertionResponseJson → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialCreationOptions.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialCreationOptions.java.html new file mode 100644 index 000000000..af7d706e7 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialCreationOptions.java.html @@ -0,0 +1,7186 @@ + + + + + + + + + +

PublicKeyCredentialCreationOptions.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import com.fasterxml.jackson.core.JsonProcessingException;
+ +30 + + + + + + +
import com.fasterxml.jackson.databind.ObjectMapper;
+ +31 + + + + + + +
import com.fasterxml.jackson.databind.node.ObjectNode;
+ +32 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +33 + + + + + + +
import com.yubico.internal.util.JacksonCodecs;
+ +34 + + + + + + +
import com.yubico.webauthn.FinishRegistrationOptions;
+ +35 + + + + + + +
import com.yubico.webauthn.RelyingParty;
+ +36 + + + + + + +
import java.security.KeyFactory;
+ +37 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +38 + + + + + + +
import java.security.Signature;
+ +39 + + + + + + +
import java.util.Collections;
+ +40 + + + + + + +
import java.util.List;
+ +41 + + + + + + +
import java.util.Optional;
+ +42 + + + + + + +
import java.util.Set;
+ +43 + + + + + + +
import java.util.TreeSet;
+ +44 + + + + + + +
import java.util.stream.Collectors;
+ +45 + + + + + + +
import lombok.Builder;
+ +46 + + + + + + +
import lombok.NonNull;
+ +47 + + + + + + +
import lombok.Value;
+ +48 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +49 + + + + + + +
+ +50 + + + + + + +
/**
+ +51 + + + + + + +
 * Parameters for a call to <code>navigator.credentials.create()</code>.
+ +52 + + + + + + +
 *
+ +53 + + + + + + +
 * @see <a
+ +54 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-publickeycredentialcreationoptions">§5.4.
+ +55 + + + + + + +
 *     Options for Credential Creation (dictionary PublicKeyCredentialCreationOptions)</a>
+ +56 + + + + + + +
 */
+ +57 + + + + + + +
@Slf4j
+ +58 + + + + + + +
@Value
+ +59 + + + + + + +
@Builder(toBuilder = true)
+ +60 + + + + + + +
public class PublicKeyCredentialCreationOptions {
+ +61 + + + + + + +
+ +62 + + + + + + +
  /**
+ +63 + + + + + + +
   * Contains data about the Relying Party responsible for the request.
+ +64 + + + + + + +
   *
+ +65 + + + + + + +
   * <p>Its value's {@link RelyingPartyIdentity#getId() id} member specifies the <a
+ +66 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#rp-id">RP ID</a> the credential
+ +67 + + + + + + +
   * should be scoped to. If omitted, its value will be set by the client. See {@link
+ +68 + + + + + + +
   * RelyingPartyIdentity} for further details.
+ +69 + + + + + + +
   */
+ +70 + + + + + + +
  @NonNull private final RelyingPartyIdentity rp;
+ +71 + + + + + + +
+ +72 + + + + + + +
  /** Contains data about the user account for which the Relying Party is requesting attestation. */
+ +73 + + + + + + +
  @NonNull private final UserIdentity user;
+ +74 + + + + + + +
+ +75 + + + + + + +
  /**
+ +76 + + + + + + +
   * A challenge intended to be used for generating the newly created credential’s attestation
+ +77 + + + + + + +
   * object. See the <a
+ +78 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-cryptographic-challenges">§13.1
+ +79 + + + + + + +
   * Cryptographic Challenges</a> security consideration.
+ +80 + + + + + + +
   */
+ +81 + + + + + + +
  @NonNull private final ByteArray challenge;
+ +82 + + + + + + +
+ +83 + + + + + + +
  /**
+ +84 + + + + + + +
   * Information about the desired properties of the credential to be created.
+ +85 + + + + + + +
   *
+ +86 + + + + + + +
   * <p>The sequence is ordered from most preferred to least preferred. The client makes a
+ +87 + + + + + + +
   * best-effort to create the most preferred credential that it can.
+ +88 + + + + + + +
   */
+ +89 + + + + + + +
  @NonNull private final List<PublicKeyCredentialParameters> pubKeyCredParams;
+ +90 + + + + + + +
+ +91 + + + + + + +
  /**
+ +92 + + + + + + +
   * A time, in milliseconds, that the caller is willing to wait for the call to complete. This is
+ +93 + + + + + + +
   * treated as a hint, and MAY be overridden by the client.
+ +94 + + + + + + +
   */
+ +95 + + + + + + +
  private final Long timeout;
+ +96 + + + + + + +
+ +97 + + + + + + +
  /**
+ +98 + + + + + + +
   * Intended for use by Relying Parties that wish to limit the creation of multiple credentials for
+ +99 + + + + + + +
   * the same account on a single authenticator. The client is requested to return an error if the
+ +100 + + + + + + +
   * new credential would be created on an authenticator that also contains one of the credentials
+ +101 + + + + + + +
   * enumerated in this parameter.
+ +102 + + + + + + +
   */
+ +103 + + + + + + +
  private final Set<PublicKeyCredentialDescriptor> excludeCredentials;
+ +104 + + + + + + +
+ +105 + + + + + + +
  /**
+ +106 + + + + + + +
   * Intended for use by Relying Parties that wish to select the appropriate authenticators to
+ +107 + + + + + + +
   * participate in the create() operation.
+ +108 + + + + + + +
   */
+ +109 + + + + + + +
  private final AuthenticatorSelectionCriteria authenticatorSelection;
+ +110 + + + + + + +
+ +111 + + + + + + +
  /**
+ +112 + + + + + + +
   * Intended for use by Relying Parties that wish to express their preference for attestation
+ +113 + + + + + + +
   * conveyance. The default is {@link AttestationConveyancePreference#NONE}.
+ +114 + + + + + + +
   */
+ +115 + + + + + + +
  @NonNull private final AttestationConveyancePreference attestation;
+ +116 + + + + + + +
+ +117 + + + + + + +
  /**
+ +118 + + + + + + +
   * Additional parameters requesting additional processing by the client and authenticator.
+ +119 + + + + + + +
   *
+ +120 + + + + + + +
   * <p>For example, the caller may request that only authenticators with certain capabilities be
+ +121 + + + + + + +
   * used to create the credential, or that particular information be returned in the attestation
+ +122 + + + + + + +
   * object. Some extensions are defined in <a
+ +123 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-extensions">§9 WebAuthn
+ +124 + + + + + + +
   * Extensions</a>; consult the IANA "WebAuthn Extension Identifier" registry established by <a
+ +125 + + + + + + +
   * href="https://tools.ietf.org/html/draft-hodges-webauthn-registries">[WebAuthn-Registries]</a>
+ +126 + + + + + + +
   * for an up-to-date list of registered WebAuthn Extensions.
+ +127 + + + + + + +
   */
+ +128 + + + + + + +
  @NonNull private final RegistrationExtensionInputs extensions;
+ +129 + + + + + + +
+ +130 + + + + + + +
  @Builder
+ +131 + + + + + + +
  @JsonCreator
+ +132 + + + + + + +
  private PublicKeyCredentialCreationOptions(
+ +133 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("rp") RelyingPartyIdentity rp,
+ +134 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("user") UserIdentity user,
+ +135 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("challenge") ByteArray challenge,
+ +136 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("pubKeyCredParams")
+ +137 + + + + + + +
          List<PublicKeyCredentialParameters> pubKeyCredParams,
+ +138 + + + + + + +
      @JsonProperty("timeout") Long timeout,
+ +139 + + + + + + +
      @JsonProperty("excludeCredentials") Set<PublicKeyCredentialDescriptor> excludeCredentials,
+ +140 + + + + + + +
      @JsonProperty("authenticatorSelection") AuthenticatorSelectionCriteria authenticatorSelection,
+ +141 + + + + + + +
      @JsonProperty("attestation") AttestationConveyancePreference attestation,
+ +142 + + + + + + +
      @JsonProperty("extensions") RegistrationExtensionInputs extensions) {
+ +143 + + + + + + +
    this.rp = rp;
+ +144 + + + + + + +
    this.user = user;
+ +145 + + + + + + +
    this.challenge = challenge;
+ +146 + + + + + + +
    this.pubKeyCredParams = filterAvailableAlgorithms(pubKeyCredParams);
+ +147 + + + + + + +
    this.timeout = timeout;
+ +148 + + + + + + +
    this.excludeCredentials =
+ +149 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        excludeCredentials == null
+ +150 + + + + + + +
            ? null
+ +151 + + + + + + +
            : CollectionUtil.immutableSortedSet(new TreeSet<>(excludeCredentials));
+ +152 + + + + + + +
    this.authenticatorSelection = authenticatorSelection;
+ +153 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    this.attestation = attestation == null ? AttestationConveyancePreference.NONE : attestation;
+ +154 + + + + + + +
    this.extensions =
+ +155 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        extensions == null ? RegistrationExtensionInputs.builder().build() : extensions;
+ +156 + + + + + + +
  }
+ +157 + + + + + + +
+ +158 + + + + + + +
  /**
+ +159 + + + + + + +
   * Serialize this {@link PublicKeyCredentialCreationOptions} value to JSON suitable for sending to
+ +160 + + + + + + +
   * the client.
+ +161 + + + + + + +
   *
+ +162 + + + + + + +
   * <p>Any {@link ByteArray} values in this data structure will be {@link ByteArray#getBase64Url()
+ +163 + + + + + + +
   * Base64Url} encoded. Those values MUST be decoded into <code>BufferSource</code> values (such as
+ +164 + + + + + + +
   * <code>Uint8Array</code>) on the client side before calling <code>navigator.credentials.create()
+ +165 + + + + + + +
   * </code>.
+ +166 + + + + + + +
   *
+ +167 + + + + + + +
   * <p>After decoding binary values, the resulting JavaScript object is suitable for passing as an
+ +168 + + + + + + +
   * argument to <code>navigator.credentials.create()</code>.
+ +169 + + + + + + +
   *
+ +170 + + + + + + +
   * @return a JSON value suitable for sending to the client and passing as an argument to <code>
+ +171 + + + + + + +
   *     navigator.credentials.create()</code>, after decoding binary options from Base64Url
+ +172 + + + + + + +
   *     strings.
+ +173 + + + + + + +
   * @throws JsonProcessingException if JSON serialization fails.
+ +174 + + + + + + +
   */
+ +175 + + + + + + +
  public String toCredentialsCreateJson() throws JsonProcessingException {
+ +176 + + + + + + +
    ObjectMapper json = JacksonCodecs.json();
+ +177 + + + + + + +
    ObjectNode result = json.createObjectNode();
+ +178 + + + + + + +
    result.set("publicKey", json.valueToTree(this));
+ +179 + + +1 + +1. toCredentialsCreateJson : replaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::toCredentialsCreateJson → KILLED
+ +
+
+
    return json.writeValueAsString(result);
+ +180 + + + + + + +
  }
+ +181 + + + + + + +
+ +182 + + + + + + +
  /**
+ +183 + + + + + + +
   * Encode this {@link PublicKeyCredentialCreationOptions} to JSON. The inverse of {@link
+ +184 + + + + + + +
   * #fromJson(String)}.
+ +185 + + + + + + +
   *
+ +186 + + + + + + +
   * <p>This method is suitable for encoding the {@link PublicKeyCredentialCreationOptions} for
+ +187 + + + + + + +
   * temporary storage so that it can later be passed as an argument to {@link
+ +188 + + + + + + +
   * RelyingParty#finishRegistration(FinishRegistrationOptions)}. The {@link #fromJson(String)}
+ +189 + + + + + + +
   * factory function is guaranteed to restore an identical {@link
+ +190 + + + + + + +
   * PublicKeyCredentialCreationOptions} instance.
+ +191 + + + + + + +
   *
+ +192 + + + + + + +
   * <p>Note that encoding might not be needed if you can simply keep the {@link
+ +193 + + + + + + +
   * PublicKeyCredentialCreationOptions} instance in server memory.
+ +194 + + + + + + +
   *
+ +195 + + + + + + +
   * @return this {@link PublicKeyCredentialCreationOptions} encoded to JSON.
+ +196 + + + + + + +
   * @throws JsonProcessingException
+ +197 + + + + + + +
   */
+ +198 + + + + + + +
  public String toJson() throws JsonProcessingException {
+ +199 + + +1 + +1. toJson : replaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::toJson → KILLED
+ +
+
+
    return JacksonCodecs.json().writeValueAsString(this);
+ +200 + + + + + + +
  }
+ +201 + + + + + + +
+ +202 + + + + + + +
  /**
+ +203 + + + + + + +
   * Decode a {@link PublicKeyCredentialCreationOptions} from JSON. The inverse of {@link
+ +204 + + + + + + +
   * #toJson()}.
+ +205 + + + + + + +
   *
+ +206 + + + + + + +
   * <p>If the JSON was generated by the {@link #toJson()} method, then {@link #fromJson(String)} in
+ +207 + + + + + + +
   * the same library version guarantees to restore an identical {@link
+ +208 + + + + + + +
   * PublicKeyCredentialCreationOptions} instance. This is not guaranteed between different library
+ +209 + + + + + + +
   * versions.
+ +210 + + + + + + +
   *
+ +211 + + + + + + +
   * @return a {@link PublicKeyCredentialCreationOptions} decoded from the input JSON.
+ +212 + + + + + + +
   * @throws JsonProcessingException
+ +213 + + + + + + +
   */
+ +214 + + + + + + +
  public static PublicKeyCredentialCreationOptions fromJson(String json)
+ +215 + + + + + + +
      throws JsonProcessingException {
+ +216 + + +1 + +1. fromJson : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::fromJson → KILLED
+ +
+
+
    return JacksonCodecs.json().readValue(json, PublicKeyCredentialCreationOptions.class);
+ +217 + + + + + + +
  }
+ +218 + + + + + + +
+ +219 + + + + + + +
  public Optional<Long> getTimeout() {
+ +220 + + +1 + +1. getTimeout : replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getTimeout → KILLED
+ +
+
+
    return Optional.ofNullable(timeout);
+ +221 + + + + + + +
  }
+ +222 + + + + + + +
+ +223 + + + + + + +
  public Optional<Set<PublicKeyCredentialDescriptor>> getExcludeCredentials() {
+ +224 + + +1 + +1. getExcludeCredentials : replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getExcludeCredentials → KILLED
+ +
+
+
    return Optional.ofNullable(excludeCredentials);
+ +225 + + + + + + +
  }
+ +226 + + + + + + +
+ +227 + + + + + + +
  public Optional<AuthenticatorSelectionCriteria> getAuthenticatorSelection() {
+ +228 + + +1 + +1. getAuthenticatorSelection : replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getAuthenticatorSelection → KILLED
+ +
+
+
    return Optional.ofNullable(authenticatorSelection);
+ +229 + + + + + + +
  }
+ +230 + + + + + + +
+ +231 + + + + + + +
  public static PublicKeyCredentialCreationOptionsBuilder.MandatoryStages builder() {
+ +232 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::builder → KILLED
+ +
+
+
    return new PublicKeyCredentialCreationOptionsBuilder.MandatoryStages();
+ +233 + + + + + + +
  }
+ +234 + + + + + + +
+ +235 + + + + + + +
  public static class PublicKeyCredentialCreationOptionsBuilder {
+ +236 + + + + + + +
    private Long timeout = null;
+ +237 + + + + + + +
    private Set<PublicKeyCredentialDescriptor> excludeCredentials = null;
+ +238 + + + + + + +
    private AuthenticatorSelectionCriteria authenticatorSelection = null;
+ +239 + + + + + + +
+ +240 + + + + + + +
    public static class MandatoryStages {
+ +241 + + + + + + +
      private final PublicKeyCredentialCreationOptionsBuilder builder =
+ +242 + + + + + + +
          new PublicKeyCredentialCreationOptionsBuilder();
+ +243 + + + + + + +
+ +244 + + + + + + +
      /**
+ +245 + + + + + + +
       * {@link PublicKeyCredentialCreationOptionsBuilder#rp(RelyingPartyIdentity) rp} is a required
+ +246 + + + + + + +
       * parameter.
+ +247 + + + + + + +
       *
+ +248 + + + + + + +
       * @see PublicKeyCredentialCreationOptionsBuilder#rp(RelyingPartyIdentity)
+ +249 + + + + + + +
       */
+ +250 + + + + + + +
      public Step2 rp(RelyingPartyIdentity rp) {
+ +251 + + + + + + +
        builder.rp(rp);
+ +252 + + +1 + +1. rp : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages::rp → KILLED
+ +
+
+
        return new Step2();
+ +253 + + + + + + +
      }
+ +254 + + + + + + +
+ +255 + + + + + + +
      public class Step2 {
+ +256 + + + + + + +
        /**
+ +257 + + + + + + +
         * {@link PublicKeyCredentialCreationOptionsBuilder#user(UserIdentity) user} is a required
+ +258 + + + + + + +
         * parameter.
+ +259 + + + + + + +
         *
+ +260 + + + + + + +
         * @see PublicKeyCredentialCreationOptionsBuilder#user(UserIdentity)
+ +261 + + + + + + +
         */
+ +262 + + + + + + +
        public Step3 user(UserIdentity user) {
+ +263 + + + + + + +
          builder.user(user);
+ +264 + + +1 + +1. user : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step2::user → KILLED
+ +
+
+
          return new Step3();
+ +265 + + + + + + +
        }
+ +266 + + + + + + +
      }
+ +267 + + + + + + +
+ +268 + + + + + + +
      public class Step3 {
+ +269 + + + + + + +
        /**
+ +270 + + + + + + +
         * {@link PublicKeyCredentialCreationOptionsBuilder#challenge(ByteArray) challenge} is a
+ +271 + + + + + + +
         * required parameter.
+ +272 + + + + + + +
         *
+ +273 + + + + + + +
         * @see PublicKeyCredentialCreationOptionsBuilder#challenge(ByteArray)
+ +274 + + + + + + +
         */
+ +275 + + + + + + +
        public Step4 challenge(ByteArray challenge) {
+ +276 + + + + + + +
          builder.challenge(challenge);
+ +277 + + +1 + +1. challenge : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step3::challenge → KILLED
+ +
+
+
          return new Step4();
+ +278 + + + + + + +
        }
+ +279 + + + + + + +
      }
+ +280 + + + + + + +
+ +281 + + + + + + +
      public class Step4 {
+ +282 + + + + + + +
        /**
+ +283 + + + + + + +
         * {@link PublicKeyCredentialCreationOptionsBuilder#pubKeyCredParams(List) pubKeyCredParams}
+ +284 + + + + + + +
         * is a required parameter.
+ +285 + + + + + + +
         *
+ +286 + + + + + + +
         * @see PublicKeyCredentialCreationOptionsBuilder#pubKeyCredParams(List)
+ +287 + + + + + + +
         */
+ +288 + + + + + + +
        public PublicKeyCredentialCreationOptionsBuilder pubKeyCredParams(
+ +289 + + + + + + +
            List<PublicKeyCredentialParameters> pubKeyCredParams) {
+ +290 + + +1 + +1. pubKeyCredParams : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step4::pubKeyCredParams → KILLED
+ +
+
+
          return builder.pubKeyCredParams(pubKeyCredParams);
+ +291 + + + + + + +
        }
+ +292 + + + + + + +
      }
+ +293 + + + + + + +
    }
+ +294 + + + + + + +
+ +295 + + + + + + +
    /**
+ +296 + + + + + + +
     * A time, in milliseconds, that the caller is willing to wait for the call to complete. This is
+ +297 + + + + + + +
     * treated as a hint, and MAY be overridden by the client.
+ +298 + + + + + + +
     */
+ +299 + + +1 + +1. timeout : negated conditional → KILLED
+ +
+
+
    public PublicKeyCredentialCreationOptionsBuilder timeout(@NonNull Optional<Long> timeout) {
+ +300 + + + + + + +
      this.timeout = timeout.orElse(null);
+ +301 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout → KILLED
+ +
+
+
      return this;
+ +302 + + + + + + +
    }
+ +303 + + + + + + +
+ +304 + + + + + + +
    /*
+ +305 + + + + + + +
     * Workaround, see: https://github.com/rzwitserloot/lombok/issues/2623#issuecomment-714816001
+ +306 + + + + + + +
     * Consider reverting this workaround if Lombok fixes that issue.
+ +307 + + + + + + +
     */
+ +308 + + + + + + +
    private PublicKeyCredentialCreationOptionsBuilder timeout(Long timeout) {
+ +309 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout → KILLED
+ +
+
+
      return this.timeout(Optional.ofNullable(timeout));
+ +310 + + + + + + +
    }
+ +311 + + + + + + +
+ +312 + + + + + + +
    /**
+ +313 + + + + + + +
     * A time, in milliseconds, that the caller is willing to wait for the call to complete. This is
+ +314 + + + + + + +
     * treated as a hint, and MAY be overridden by the client.
+ +315 + + + + + + +
     */
+ +316 + + + + + + +
    public PublicKeyCredentialCreationOptionsBuilder timeout(long timeout) {
+ +317 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout → NO_COVERAGE
+ +
+
+
      return this.timeout(Optional.of(timeout));
+ +318 + + + + + + +
    }
+ +319 + + + + + + +
+ +320 + + + + + + +
    /**
+ +321 + + + + + + +
     * Intended for use by Relying Parties that wish to limit the creation of multiple credentials
+ +322 + + + + + + +
     * for the same account on a single authenticator. The client is requested to return an error if
+ +323 + + + + + + +
     * the new credential would be created on an authenticator that also contains one of the
+ +324 + + + + + + +
     * credentials enumerated in this parameter.
+ +325 + + + + + + +
     */
+ +326 + + + + + + +
    public PublicKeyCredentialCreationOptionsBuilder excludeCredentials(
+ +327 + + + + + + +
        Optional<Set<PublicKeyCredentialDescriptor>> excludeCredentials) {
+ +328 + + +1 + +1. excludeCredentials : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::excludeCredentials → KILLED
+ +
+
+
      return this.excludeCredentials(excludeCredentials.orElse(null));
+ +329 + + + + + + +
    }
+ +330 + + + + + + +
+ +331 + + + + + + +
    /**
+ +332 + + + + + + +
     * Intended for use by Relying Parties that wish to limit the creation of multiple credentials
+ +333 + + + + + + +
     * for the same account on a single authenticator. The client is requested to return an error if
+ +334 + + + + + + +
     * the new credential would be created on an authenticator that also contains one of the
+ +335 + + + + + + +
     * credentials enumerated in this parameter.
+ +336 + + + + + + +
     */
+ +337 + + + + + + +
    public PublicKeyCredentialCreationOptionsBuilder excludeCredentials(
+ +338 + + + + + + +
        Set<PublicKeyCredentialDescriptor> excludeCredentials) {
+ +339 + + + + + + +
      this.excludeCredentials = excludeCredentials;
+ +340 + + +1 + +1. excludeCredentials : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::excludeCredentials → KILLED
+ +
+
+
      return this;
+ +341 + + + + + + +
    }
+ +342 + + + + + + +
+ +343 + + + + + + +
    /**
+ +344 + + + + + + +
     * Intended for use by Relying Parties that wish to select the appropriate authenticators to
+ +345 + + + + + + +
     * participate in the create() operation.
+ +346 + + + + + + +
     */
+ +347 + + + + + + +
    public PublicKeyCredentialCreationOptionsBuilder authenticatorSelection(
+ +348 + + +1 + +1. authenticatorSelection : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<AuthenticatorSelectionCriteria> authenticatorSelection) {
+ +349 + + +1 + +1. authenticatorSelection : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::authenticatorSelection → KILLED
+ +
+
+
      return this.authenticatorSelection(authenticatorSelection.orElse(null));
+ +350 + + + + + + +
    }
+ +351 + + + + + + +
+ +352 + + + + + + +
    /**
+ +353 + + + + + + +
     * Intended for use by Relying Parties that wish to select the appropriate authenticators to
+ +354 + + + + + + +
     * participate in the create() operation.
+ +355 + + + + + + +
     */
+ +356 + + + + + + +
    public PublicKeyCredentialCreationOptionsBuilder authenticatorSelection(
+ +357 + + + + + + +
        AuthenticatorSelectionCriteria authenticatorSelection) {
+ +358 + + + + + + +
      this.authenticatorSelection = authenticatorSelection;
+ +359 + + +1 + +1. authenticatorSelection : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::authenticatorSelection → KILLED
+ +
+
+
      return this;
+ +360 + + + + + + +
    }
+ +361 + + + + + + +
  }
+ +362 + + + + + + +
+ +363 + + + + + + +
  /*
+ +364 + + + + + + +
   * Essentially a copy of RelyingParty.filterAvailableAlgorithms(List) because that method and WebAuthnCodecs are not visible here.
+ +365 + + + + + + +
   */
+ +366 + + + + + + +
  private static List<PublicKeyCredentialParameters> filterAvailableAlgorithms(
+ +367 + + + + + + +
      List<PublicKeyCredentialParameters> pubKeyCredParams) {
+ +368 + + +1 + +1. filterAvailableAlgorithms : replaced return value with Collections.emptyList for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::filterAvailableAlgorithms → KILLED
+ +
+
+
    return Collections.unmodifiableList(
+ +369 + + + + + + +
        pubKeyCredParams.stream()
+ +370 + + + + + + +
            .filter(
+ +371 + + + + + + +
                param -> {
+ +372 + + + + + + +
                  try {
+ +373 + + + + + + +
                    switch (param.getAlg()) {
+ +374 + + + + + + +
                      case EdDSA:
+ +375 + + + + + + +
                        KeyFactory.getInstance("EdDSA");
+ +376 + + + + + + +
                        break;
+ +377 + + + + + + +
+ +378 + + + + + + +
                      case ES256:
+ +379 + + + + + + +
                      case ES384:
+ +380 + + + + + + +
                      case ES512:
+ +381 + + + + + + +
                        KeyFactory.getInstance("EC");
+ +382 + + + + + + +
                        break;
+ +383 + + + + + + +
+ +384 + + + + + + +
                      case RS256:
+ +385 + + + + + + +
                      case RS384:
+ +386 + + + + + + +
                      case RS512:
+ +387 + + + + + + +
                      case RS1:
+ +388 + + + + + + +
                        KeyFactory.getInstance("RSA");
+ +389 + + + + + + +
                        break;
+ +390 + + + + + + +
+ +391 + + + + + + +
                      default:
+ +392 + + + + + + +
                        log.warn(
+ +393 + + + + + + +
                            "Unknown algorithm: {}. Please file a bug report.", param.getAlg());
+ +394 + + + + + + +
                    }
+ +395 + + + + + + +
                  } catch (NoSuchAlgorithmException e) {
+ +396 + + + + + + +
                    log.warn(
+ +397 + + + + + + +
                        "Unsupported algorithm in PublicKeyCredentialCreationOptions.pubKeyCredParams: {}. No KeyFactory available; registrations with this key algorithm will fail. You may need to add a dependency and load a provider using java.security.Security.addProvider().",
+ +398 + + + + + + +
                        param.getAlg());
+ +399 + + +1 + +1. lambda$filterAvailableAlgorithms$0 : replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 → KILLED
+ +
+
+
                    return false;
+ +400 + + + + + + +
                  }
+ +401 + + + + + + +
+ +402 + + + + + + +
                  try {
+ +403 + + + + + + +
                    switch (param.getAlg()) {
+ +404 + + + + + + +
                      case EdDSA:
+ +405 + + + + + + +
                        Signature.getInstance("EDDSA");
+ +406 + + + + + + +
                        break;
+ +407 + + + + + + +
+ +408 + + + + + + +
                      case ES256:
+ +409 + + + + + + +
                        Signature.getInstance("SHA256withECDSA");
+ +410 + + + + + + +
                        break;
+ +411 + + + + + + +
+ +412 + + + + + + +
                      case ES384:
+ +413 + + + + + + +
                        Signature.getInstance("SHA384withECDSA");
+ +414 + + + + + + +
                        break;
+ +415 + + + + + + +
+ +416 + + + + + + +
                      case ES512:
+ +417 + + + + + + +
                        Signature.getInstance("SHA512withECDSA");
+ +418 + + + + + + +
                        break;
+ +419 + + + + + + +
+ +420 + + + + + + +
                      case RS256:
+ +421 + + + + + + +
                        Signature.getInstance("SHA256withRSA");
+ +422 + + + + + + +
                        break;
+ +423 + + + + + + +
+ +424 + + + + + + +
                      case RS384:
+ +425 + + + + + + +
                        Signature.getInstance("SHA384withRSA");
+ +426 + + + + + + +
                        break;
+ +427 + + + + + + +
+ +428 + + + + + + +
                      case RS512:
+ +429 + + + + + + +
                        Signature.getInstance("SHA512withRSA");
+ +430 + + + + + + +
                        break;
+ +431 + + + + + + +
+ +432 + + + + + + +
                      case RS1:
+ +433 + + + + + + +
                        Signature.getInstance("SHA1withRSA");
+ +434 + + + + + + +
                        break;
+ +435 + + + + + + +
+ +436 + + + + + + +
                      default:
+ +437 + + + + + + +
                        log.warn(
+ +438 + + + + + + +
                            "Unknown algorithm: {}. Please file a bug report.", param.getAlg());
+ +439 + + + + + + +
                    }
+ +440 + + + + + + +
                  } catch (NoSuchAlgorithmException e) {
+ +441 + + + + + + +
                    log.warn(
+ +442 + + + + + + +
                        "Unsupported algorithm in PublicKeyCredentialCreationOptions.pubKeyCredParams: {}. No Signature available; registrations with this key algorithm will fail. You may need to add a dependency and load a provider using java.security.Security.addProvider().",
+ +443 + + + + + + +
                        param.getAlg());
+ +444 + + +1 + +1. lambda$filterAvailableAlgorithms$0 : replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 → NO_COVERAGE
+ +
+
+
                    return false;
+ +445 + + + + + + +
                  }
+ +446 + + + + + + +
+ +447 + + +1 + +1. lambda$filterAvailableAlgorithms$0 : replaced boolean return with false for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 → KILLED
+ +
+
+
                  return true;
+ +448 + + + + + + +
                })
+ +449 + + + + + + +
            .collect(Collectors.toList()));
+ +450 + + + + + + +
  }
+ +451 + + + + + + +
}

Mutations

133 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
negated conditional → KILLED

+
134 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
negated conditional → KILLED

+
135 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
negated conditional → KILLED

+
136 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
negated conditional → KILLED

+
149 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
negated conditional → KILLED

+
153 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
155 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
179 + + + +

1.1
Location : toCredentialsCreateJson
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::toCredentialsCreateJson → KILLED

+
199 + + + +

1.1
Location : toJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::toJson → KILLED

+
216 + + + +

1.1
Location : fromJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::fromJson → KILLED

+
220 + + + +

1.1
Location : getTimeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getTimeout → KILLED

+
224 + + + +

1.1
Location : getExcludeCredentials
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getExcludeCredentials → KILLED

+
228 + + + +

1.1
Location : getAuthenticatorSelection
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getAuthenticatorSelection → KILLED

+
232 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::builder → KILLED

+
252 + + + +

1.1
Location : rp
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages::rp → KILLED

+
264 + + + +

1.1
Location : user
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step2::user → KILLED

+
277 + + + +

1.1
Location : challenge
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step3::challenge → KILLED

+
290 + + + +

1.1
Location : pubKeyCredParams
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step4::pubKeyCredParams → KILLED

+
299 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
negated conditional → KILLED

+
301 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout → KILLED

+
309 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout → KILLED

+
317 + + + +

1.1
Location : timeout
Killed by : none
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout → NO_COVERAGE

+
328 + + + +

1.1
Location : excludeCredentials
Killed by : com.yubico.webauthn.data.BuildersSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::excludeCredentials → KILLED

+
340 + + + +

1.1
Location : excludeCredentials
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::excludeCredentials → KILLED

+
348 + + + +

1.1
Location : authenticatorSelection
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
negated conditional → KILLED

+
349 + + + +

1.1
Location : authenticatorSelection
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::authenticatorSelection → KILLED

+
359 + + + +

1.1
Location : authenticatorSelection
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::authenticatorSelection → KILLED

+
368 + + + +

1.1
Location : filterAvailableAlgorithms
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
replaced return value with Collections.emptyList for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::filterAvailableAlgorithms → KILLED

+
399 + + + +

1.1
Location : lambda$filterAvailableAlgorithms$0
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 → KILLED

+
444 + + + +

1.1
Location : lambda$filterAvailableAlgorithms$0
Killed by : none
replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 → NO_COVERAGE

+
447 + + + +

1.1
Location : lambda$filterAvailableAlgorithms$0
Killed by : com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)
replaced boolean return with false for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialDescriptor.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialDescriptor.java.html new file mode 100644 index 000000000..fdd555dc8 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialDescriptor.java.html @@ -0,0 +1,2854 @@ + + + + + + + + + +

PublicKeyCredentialDescriptor.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +30 + + + + + + +
import com.yubico.internal.util.ComparableUtil;
+ +31 + + + + + + +
import com.yubico.webauthn.RegistrationResult;
+ +32 + + + + + + +
import com.yubico.webauthn.ToPublicKeyCredentialDescriptor;
+ +33 + + + + + + +
import java.util.Optional;
+ +34 + + + + + + +
import java.util.Set;
+ +35 + + + + + + +
import java.util.SortedSet;
+ +36 + + + + + + +
import java.util.TreeSet;
+ +37 + + + + + + +
import lombok.Builder;
+ +38 + + + + + + +
import lombok.NonNull;
+ +39 + + + + + + +
import lombok.Value;
+ +40 + + + + + + +
+ +41 + + + + + + +
/**
+ +42 + + + + + + +
 * The attributes that are specified by a caller when referring to a public key credential as an
+ +43 + + + + + + +
 * input parameter to the <code>navigator.credentials.create()</code> or <code>
+ +44 + + + + + + +
 * navigator.credentials.get()</code> methods. It mirrors the fields of the {@link
+ +45 + + + + + + +
 * PublicKeyCredential} object returned by the latter methods.
+ +46 + + + + + + +
 *
+ +47 + + + + + + +
 * @see <a
+ +48 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-publickeycredentialdescriptor">§5.10.3.
+ +49 + + + + + + +
 *     Credential Descriptor (dictionary PublicKeyCredentialDescriptor)</a>
+ +50 + + + + + + +
 */
+ +51 + + + + + + +
@Value
+ +52 + + + + + + +
@Builder(toBuilder = true)
+ +53 + + + + + + +
public class PublicKeyCredentialDescriptor
+ +54 + + + + + + +
    implements Comparable<PublicKeyCredentialDescriptor>, ToPublicKeyCredentialDescriptor {
+ +55 + + + + + + +
+ +56 + + + + + + +
  /** The type of the credential the caller is referring to. */
+ +57 + + + + + + +
  @NonNull @Builder.Default
+ +58 + + + + + + +
  private final PublicKeyCredentialType type = PublicKeyCredentialType.PUBLIC_KEY;
+ +59 + + + + + + +
+ +60 + + + + + + +
  /** The credential ID of the public key credential the caller is referring to. */
+ +61 + + + + + + +
  @NonNull private final ByteArray id;
+ +62 + + + + + + +
+ +63 + + + + + + +
  /**
+ +64 + + + + + + +
   * An OPTIONAL hint as to how the client might communicate with the managing authenticator of the
+ +65 + + + + + + +
   * public key credential the caller is referring to.
+ +66 + + + + + + +
   *
+ +67 + + + + + + +
   * <p>This SHOULD be stored along with the {@link #getId() id} and used unmodified whenever
+ +68 + + + + + + +
   * creating a {@link PublicKeyCredentialDescriptor} for this credential.
+ +69 + + + + + + +
   */
+ +70 + + + + + + +
  private final SortedSet<AuthenticatorTransport> transports;
+ +71 + + + + + + +
+ +72 + + + + + + +
  @JsonCreator
+ +73 + + + + + + +
  private PublicKeyCredentialDescriptor(
+ +74 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("type") PublicKeyCredentialType type,
+ +75 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("id") ByteArray id,
+ +76 + + + + + + +
      @JsonProperty("transports") Set<AuthenticatorTransport> transports) {
+ +77 + + + + + + +
    this.type = type;
+ +78 + + + + + + +
    this.id = id;
+ +79 + + + + + + +
    this.transports =
+ +80 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        transports == null ? null : CollectionUtil.immutableSortedSet(new TreeSet<>(transports));
+ +81 + + + + + + +
  }
+ +82 + + + + + + +
+ +83 + + + + + + +
  @Override
+ +84 + + + + + + +
  public int compareTo(PublicKeyCredentialDescriptor other) {
+ +85 + + + + + + +
    int idComparison = id.compareTo(other.id);
+ +86 + + +1 + +1. compareTo : negated conditional → KILLED
+ +
+
+
    if (idComparison != 0) {
+ +87 + + +1 + +1. compareTo : replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → KILLED
+ +
+
+
      return idComparison;
+ +88 + + + + + + +
    }
+ +89 + + + + + + +
+ +90 + + +1 + +1. compareTo : negated conditional → KILLED
+ +
+
+
    if (type.compareTo(other.type) != 0) {
+ +91 + + +1 + +1. compareTo : replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → NO_COVERAGE
+ +
+
+
      return type.compareTo(other.type);
+ +92 + + + + + + +
    }
+ +93 + + + + + + +
+ +94 + + +2 + +1. compareTo : negated conditional → KILLED
+2. compareTo : negated conditional → KILLED
+ +
+
+
    if (!getTransports().isPresent() && other.getTransports().isPresent()) {
+ +95 + + +1 + +1. compareTo : replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → SURVIVED
+ +
+
+
      return -1;
+ +96 + + +2 + +1. compareTo : negated conditional → KILLED
+2. compareTo : negated conditional → KILLED
+ +
+
+
    } else if (getTransports().isPresent() && !other.getTransports().isPresent()) {
+ +97 + + +1 + +1. compareTo : replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → SURVIVED
+ +
+
+
      return 1;
+ +98 + + +2 + +1. compareTo : negated conditional → KILLED
+2. compareTo : negated conditional → KILLED
+ +
+
+
    } else if (getTransports().isPresent() && other.getTransports().isPresent()) {
+ +99 + + + + + + +
      int transportsComparison =
+ +100 + + + + + + +
          ComparableUtil.compareComparableSets(getTransports().get(), other.getTransports().get());
+ +101 + + +1 + +1. compareTo : negated conditional → KILLED
+ +
+
+
      if (transportsComparison != 0) {
+ +102 + + +1 + +1. compareTo : replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → KILLED
+ +
+
+
        return transportsComparison;
+ +103 + + + + + + +
      }
+ +104 + + + + + + +
    }
+ +105 + + + + + + +
+ +106 + + + + + + +
    return 0;
+ +107 + + + + + + +
  }
+ +108 + + + + + + +
+ +109 + + + + + + +
  public static PublicKeyCredentialDescriptorBuilder.MandatoryStages builder() {
+ +110 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::builder → KILLED
+ +
+
+
    return new PublicKeyCredentialDescriptorBuilder.MandatoryStages();
+ +111 + + + + + + +
  }
+ +112 + + + + + + +
+ +113 + + + + + + +
  /**
+ +114 + + + + + + +
   * This implementation of {@link
+ +115 + + + + + + +
   * ToPublicKeyCredentialDescriptor#toPublicKeyCredentialDescriptor()} is a no-op which returns
+ +116 + + + + + + +
   * <code>this</code> unchanged.
+ +117 + + + + + + +
   *
+ +118 + + + + + + +
   * @return <code>this</code>.
+ +119 + + + + + + +
   */
+ +120 + + + + + + +
  @Override
+ +121 + + + + + + +
  public PublicKeyCredentialDescriptor toPublicKeyCredentialDescriptor() {
+ +122 + + +1 + +1. toPublicKeyCredentialDescriptor : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::toPublicKeyCredentialDescriptor → KILLED
+ +
+
+
    return this;
+ +123 + + + + + + +
  }
+ +124 + + + + + + +
+ +125 + + + + + + +
  public static class PublicKeyCredentialDescriptorBuilder {
+ +126 + + + + + + +
    private Set<AuthenticatorTransport> transports = null;
+ +127 + + + + + + +
+ +128 + + + + + + +
    public static class MandatoryStages {
+ +129 + + + + + + +
      private final PublicKeyCredentialDescriptorBuilder builder =
+ +130 + + + + + + +
          new PublicKeyCredentialDescriptorBuilder();
+ +131 + + + + + + +
+ +132 + + + + + + +
      /**
+ +133 + + + + + + +
       * {@link PublicKeyCredentialDescriptorBuilder#id(ByteArray) id} is a required parameter.
+ +134 + + + + + + +
       *
+ +135 + + + + + + +
       * @see PublicKeyCredentialDescriptorBuilder#id(ByteArray)
+ +136 + + + + + + +
       */
+ +137 + + + + + + +
      public PublicKeyCredentialDescriptorBuilder id(ByteArray id) {
+ +138 + + +1 + +1. id : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder$MandatoryStages::id → KILLED
+ +
+
+
        return builder.id(id);
+ +139 + + + + + + +
      }
+ +140 + + + + + + +
    }
+ +141 + + + + + + +
+ +142 + + + + + + +
    /**
+ +143 + + + + + + +
     * An OPTIONAL hint as to how the client might communicate with the managing authenticator of
+ +144 + + + + + + +
     * the public key credential the caller is referring to.
+ +145 + + + + + + +
     *
+ +146 + + + + + + +
     * <p>This SHOULD be set to the unmodified value returned from {@link
+ +147 + + + + + + +
     * RegistrationResult#getKeyId()}.{@link #getTransports()} when the credential was registered.
+ +148 + + + + + + +
     */
+ +149 + + + + + + +
    public PublicKeyCredentialDescriptorBuilder transports(
+ +150 + + +1 + +1. transports : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<Set<AuthenticatorTransport>> transports) {
+ +151 + + +1 + +1. transports : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder::transports → KILLED
+ +
+
+
      return this.transports(transports.orElse(null));
+ +152 + + + + + + +
    }
+ +153 + + + + + + +
+ +154 + + + + + + +
    /**
+ +155 + + + + + + +
     * An OPTIONAL hint as to how the client might communicate with the managing authenticator of
+ +156 + + + + + + +
     * the public key credential the caller is referring to.
+ +157 + + + + + + +
     *
+ +158 + + + + + + +
     * <p>This SHOULD be set to the unmodified value returned from {@link
+ +159 + + + + + + +
     * RegistrationResult#getKeyId()}.{@link #getTransports()} when the credential was registered.
+ +160 + + + + + + +
     */
+ +161 + + + + + + +
    public PublicKeyCredentialDescriptorBuilder transports(Set<AuthenticatorTransport> transports) {
+ +162 + + + + + + +
      this.transports = transports;
+ +163 + + +1 + +1. transports : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder::transports → KILLED
+ +
+
+
      return this;
+ +164 + + + + + + +
    }
+ +165 + + + + + + +
  }
+ +166 + + + + + + +
+ +167 + + + + + + +
  public Optional<SortedSet<AuthenticatorTransport>> getTransports() {
+ +168 + + +1 + +1. getTransports : replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::getTransports → KILLED
+ +
+
+
    return Optional.ofNullable(transports);
+ +169 + + + + + + +
  }
+ +170 + + + + + + +
}

Mutations

74 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
75 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
80 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
86 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
87 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → KILLED

+
90 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
91 + + + +

1.1
Location : compareTo
Killed by : none
replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → NO_COVERAGE

+
94 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

2.2
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
95 + + + +

1.1
Location : compareTo
Killed by : none
replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → SURVIVED

+
96 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

2.2
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
97 + + + +

1.1
Location : compareTo
Killed by : none
replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → SURVIVED

+
98 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

2.2
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
101 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
102 + + + +

1.1
Location : compareTo
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo → KILLED

+
110 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::builder → KILLED

+
122 + + + +

1.1
Location : toPublicKeyCredentialDescriptor
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::toPublicKeyCredentialDescriptor → KILLED

+
138 + + + +

1.1
Location : id
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder$MandatoryStages::id → KILLED

+
150 + + + +

1.1
Location : transports
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
151 + + + +

1.1
Location : transports
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder::transports → KILLED

+
163 + + + +

1.1
Location : transports
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder::transports → KILLED

+
168 + + + +

1.1
Location : getTransports
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::getTransports → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialParameters.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialParameters.java.html new file mode 100644 index 000000000..9cd5f472a --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialParameters.java.html @@ -0,0 +1,2152 @@ + + + + + + + + + +

PublicKeyCredentialParameters.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +28 + + + + + + +
import lombok.Builder;
+ +29 + + + + + + +
import lombok.NonNull;
+ +30 + + + + + + +
import lombok.Value;
+ +31 + + + + + + +
+ +32 + + + + + + +
/**
+ +33 + + + + + + +
 * Used to supply additional parameters when creating a new credential.
+ +34 + + + + + + +
 *
+ +35 + + + + + + +
 * @see <a
+ +36 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-publickeycredentialparameters">§5.3.
+ +37 + + + + + + +
 *     Parameters for Credential Generation (dictionary PublicKeyCredentialParameters) </a>
+ +38 + + + + + + +
 */
+ +39 + + + + + + +
@Value
+ +40 + + + + + + +
@Builder(toBuilder = true)
+ +41 + + + + + + +
public class PublicKeyCredentialParameters {
+ +42 + + + + + + +
+ +43 + + + + + + +
  /**
+ +44 + + + + + + +
   * Specifies the cryptographic signature algorithm with which the newly generated credential will
+ +45 + + + + + + +
   * be used, and thus also the type of asymmetric key pair to be generated, e.g., RSA or Elliptic
+ +46 + + + + + + +
   * Curve.
+ +47 + + + + + + +
   */
+ +48 + + + + + + +
  @NonNull private final COSEAlgorithmIdentifier alg;
+ +49 + + + + + + +
+ +50 + + + + + + +
  /** Specifies the type of credential to be created. */
+ +51 + + + + + + +
  @NonNull @Builder.Default
+ +52 + + + + + + +
  private final PublicKeyCredentialType type = PublicKeyCredentialType.PUBLIC_KEY;
+ +53 + + + + + + +
+ +54 + + + + + + +
  private PublicKeyCredentialParameters(
+ +55 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("alg") COSEAlgorithmIdentifier alg,
+ +56 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("type") PublicKeyCredentialType type) {
+ +57 + + + + + + +
    this.alg = alg;
+ +58 + + + + + + +
    this.type = type;
+ +59 + + + + + + +
  }
+ +60 + + + + + + +
+ +61 + + + + + + +
  /**
+ +62 + + + + + + +
   * Algorithm {@link COSEAlgorithmIdentifier#EdDSA} and type {@link
+ +63 + + + + + + +
   * PublicKeyCredentialType#PUBLIC_KEY}.
+ +64 + + + + + + +
   */
+ +65 + + + + + + +
  public static final PublicKeyCredentialParameters EdDSA =
+ +66 + + + + + + +
      builder().alg(COSEAlgorithmIdentifier.EdDSA).build();
+ +67 + + + + + + +
+ +68 + + + + + + +
  /**
+ +69 + + + + + + +
   * Algorithm {@link COSEAlgorithmIdentifier#ES256} and type {@link
+ +70 + + + + + + +
   * PublicKeyCredentialType#PUBLIC_KEY}.
+ +71 + + + + + + +
   */
+ +72 + + + + + + +
  public static final PublicKeyCredentialParameters ES256 =
+ +73 + + + + + + +
      builder().alg(COSEAlgorithmIdentifier.ES256).build();
+ +74 + + + + + + +
+ +75 + + + + + + +
  /**
+ +76 + + + + + + +
   * Algorithm {@link COSEAlgorithmIdentifier#ES384} and type {@link
+ +77 + + + + + + +
   * PublicKeyCredentialType#PUBLIC_KEY}.
+ +78 + + + + + + +
   */
+ +79 + + + + + + +
  public static final PublicKeyCredentialParameters ES384 =
+ +80 + + + + + + +
      builder().alg(COSEAlgorithmIdentifier.ES384).build();
+ +81 + + + + + + +
+ +82 + + + + + + +
  /**
+ +83 + + + + + + +
   * Algorithm {@link COSEAlgorithmIdentifier#ES512} and type {@link
+ +84 + + + + + + +
   * PublicKeyCredentialType#PUBLIC_KEY}.
+ +85 + + + + + + +
   */
+ +86 + + + + + + +
  public static final PublicKeyCredentialParameters ES512 =
+ +87 + + + + + + +
      builder().alg(COSEAlgorithmIdentifier.ES512).build();
+ +88 + + + + + + +
+ +89 + + + + + + +
  /**
+ +90 + + + + + + +
   * Algorithm {@link COSEAlgorithmIdentifier#RS1} and type {@link
+ +91 + + + + + + +
   * PublicKeyCredentialType#PUBLIC_KEY}.
+ +92 + + + + + + +
   */
+ +93 + + + + + + +
  public static final PublicKeyCredentialParameters RS1 =
+ +94 + + + + + + +
      builder().alg(COSEAlgorithmIdentifier.RS1).build();
+ +95 + + + + + + +
+ +96 + + + + + + +
  /**
+ +97 + + + + + + +
   * Algorithm {@link COSEAlgorithmIdentifier#RS256} and type {@link
+ +98 + + + + + + +
   * PublicKeyCredentialType#PUBLIC_KEY}.
+ +99 + + + + + + +
   */
+ +100 + + + + + + +
  public static final PublicKeyCredentialParameters RS256 =
+ +101 + + + + + + +
      builder().alg(COSEAlgorithmIdentifier.RS256).build();
+ +102 + + + + + + +
+ +103 + + + + + + +
  /**
+ +104 + + + + + + +
   * Algorithm {@link COSEAlgorithmIdentifier#RS384} and type {@link
+ +105 + + + + + + +
   * PublicKeyCredentialType#PUBLIC_KEY}.
+ +106 + + + + + + +
   */
+ +107 + + + + + + +
  public static final PublicKeyCredentialParameters RS384 =
+ +108 + + + + + + +
      builder().alg(COSEAlgorithmIdentifier.RS384).build();
+ +109 + + + + + + +
+ +110 + + + + + + +
  /**
+ +111 + + + + + + +
   * Algorithm {@link COSEAlgorithmIdentifier#RS512} and type {@link
+ +112 + + + + + + +
   * PublicKeyCredentialType#PUBLIC_KEY}.
+ +113 + + + + + + +
   */
+ +114 + + + + + + +
  public static final PublicKeyCredentialParameters RS512 =
+ +115 + + + + + + +
      builder().alg(COSEAlgorithmIdentifier.RS512).build();
+ +116 + + + + + + +
+ +117 + + + + + + +
  public static PublicKeyCredentialParametersBuilder.MandatoryStages builder() {
+ +118 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialParameters::builder → KILLED
+ +
+
+
    return new PublicKeyCredentialParametersBuilder.MandatoryStages();
+ +119 + + + + + + +
  }
+ +120 + + + + + + +
+ +121 + + + + + + +
  public static class PublicKeyCredentialParametersBuilder {
+ +122 + + + + + + +
    public static class MandatoryStages {
+ +123 + + + + + + +
      private final PublicKeyCredentialParametersBuilder builder =
+ +124 + + + + + + +
          new PublicKeyCredentialParametersBuilder();
+ +125 + + + + + + +
+ +126 + + + + + + +
      /**
+ +127 + + + + + + +
       * {@link PublicKeyCredentialParametersBuilder#alg(COSEAlgorithmIdentifier) alg} is a required
+ +128 + + + + + + +
       * parameter.
+ +129 + + + + + + +
       *
+ +130 + + + + + + +
       * @see PublicKeyCredentialParametersBuilder#alg(COSEAlgorithmIdentifier)
+ +131 + + + + + + +
       */
+ +132 + + + + + + +
      public PublicKeyCredentialParametersBuilder alg(COSEAlgorithmIdentifier alg) {
+ +133 + + +1 + +1. alg : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder$MandatoryStages::alg → KILLED
+ +
+
+
        return builder.alg(alg);
+ +134 + + + + + + +
      }
+ +135 + + + + + + +
    }
+ +136 + + + + + + +
  }
+ +137 + + + + + + +
}

Mutations

55 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.BuildersSpec
negated conditional → KILLED

+
56 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.BuildersSpec
negated conditional → KILLED

+
118 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.data.BuildersSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialParameters::builder → KILLED

+
133 + + + +

1.1
Location : alg
Killed by : com.yubico.webauthn.data.BuildersSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder$MandatoryStages::alg → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialRequestOptions.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialRequestOptions.java.html new file mode 100644 index 000000000..feefe8ea7 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialRequestOptions.java.html @@ -0,0 +1,4117 @@ + + + + + + + + + +

PublicKeyCredentialRequestOptions.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import com.fasterxml.jackson.core.JsonProcessingException;
+ +30 + + + + + + +
import com.fasterxml.jackson.databind.ObjectMapper;
+ +31 + + + + + + +
import com.fasterxml.jackson.databind.node.ObjectNode;
+ +32 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +33 + + + + + + +
import com.yubico.internal.util.JacksonCodecs;
+ +34 + + + + + + +
import java.util.List;
+ +35 + + + + + + +
import java.util.Optional;
+ +36 + + + + + + +
import lombok.Builder;
+ +37 + + + + + + +
import lombok.NonNull;
+ +38 + + + + + + +
import lombok.Value;
+ +39 + + + + + + +
+ +40 + + + + + + +
/**
+ +41 + + + + + + +
 * The PublicKeyCredentialRequestOptions dictionary supplies get() with the data it needs to
+ +42 + + + + + + +
 * generate an assertion.
+ +43 + + + + + + +
 *
+ +44 + + + + + + +
 * <p>Its `challenge` member must be present, while its other members are optional.
+ +45 + + + + + + +
 *
+ +46 + + + + + + +
 * @see <a
+ +47 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-publickeycredentialrequestoptions">§5.5.
+ +48 + + + + + + +
 *     Options for Assertion Generation (dictionary PublicKeyCredentialRequestOptions) </a>
+ +49 + + + + + + +
 */
+ +50 + + + + + + +
@Value
+ +51 + + + + + + +
@Builder(toBuilder = true)
+ +52 + + + + + + +
public class PublicKeyCredentialRequestOptions {
+ +53 + + + + + + +
+ +54 + + + + + + +
  /**
+ +55 + + + + + + +
   * A challenge that the selected authenticator signs, along with other data, when producing an
+ +56 + + + + + + +
   * authentication assertion. See the <a
+ +57 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-cryptographic-challenges">§13.1
+ +58 + + + + + + +
   * Cryptographic Challenges</a> security consideration.
+ +59 + + + + + + +
   */
+ +60 + + + + + + +
  @NonNull private final ByteArray challenge;
+ +61 + + + + + + +
+ +62 + + + + + + +
  /**
+ +63 + + + + + + +
   * Specifies a time, in milliseconds, that the caller is willing to wait for the call to complete.
+ +64 + + + + + + +
   *
+ +65 + + + + + + +
   * <p>This is treated as a hint, and MAY be overridden by the client.
+ +66 + + + + + + +
   */
+ +67 + + + + + + +
  private final Long timeout;
+ +68 + + + + + + +
+ +69 + + + + + + +
  /**
+ +70 + + + + + + +
   * Specifies the relying party identifier claimed by the caller.
+ +71 + + + + + + +
   *
+ +72 + + + + + + +
   * <p>If omitted, its value will be set by the client.
+ +73 + + + + + + +
   */
+ +74 + + + + + + +
  private final String rpId;
+ +75 + + + + + + +
+ +76 + + + + + + +
  /**
+ +77 + + + + + + +
   * A list of {@link PublicKeyCredentialDescriptor} objects representing public key credentials
+ +78 + + + + + + +
   * acceptable to the caller, in descending order of the caller’s preference (the first item in the
+ +79 + + + + + + +
   * list is the most preferred credential, and so on down the list).
+ +80 + + + + + + +
   */
+ +81 + + + + + + +
  private final List<PublicKeyCredentialDescriptor> allowCredentials;
+ +82 + + + + + + +
+ +83 + + + + + + +
  /**
+ +84 + + + + + + +
   * Describes the Relying Party's requirements regarding <a
+ +85 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-verification">user
+ +86 + + + + + + +
   * verification</a> for the <code>navigator.credentials.get()</code> operation.
+ +87 + + + + + + +
   *
+ +88 + + + + + + +
   * <p>Eligible authenticators are filtered to only those capable of satisfying this requirement.
+ +89 + + + + + + +
   *
+ +90 + + + + + + +
   * <p>By default, this is not set. When not set, the default in the browser is {@link
+ +91 + + + + + + +
   * UserVerificationRequirement#PREFERRED}.
+ +92 + + + + + + +
   *
+ +93 + + + + + + +
   * @see UserVerificationRequirement
+ +94 + + + + + + +
   * @see <a
+ +95 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-userVerificationRequirement">§5.8.6.
+ +96 + + + + + + +
   *     User Verification Requirement Enumeration (enum UserVerificationRequirement)</a>
+ +97 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-verification">User
+ +98 + + + + + + +
   *     Verification</a>
+ +99 + + + + + + +
   */
+ +100 + + + + + + +
  private final UserVerificationRequirement userVerification;
+ +101 + + + + + + +
+ +102 + + + + + + +
  /**
+ +103 + + + + + + +
   * Additional parameters requesting additional processing by the client and authenticator.
+ +104 + + + + + + +
   *
+ +105 + + + + + + +
   * <p>For example, if transaction confirmation is sought from the user, then the prompt string
+ +106 + + + + + + +
   * might be included as an extension.
+ +107 + + + + + + +
   */
+ +108 + + + + + + +
  @NonNull @Builder.Default
+ +109 + + + + + + +
  private final AssertionExtensionInputs extensions = AssertionExtensionInputs.builder().build();
+ +110 + + + + + + +
+ +111 + + + + + + +
  @JsonCreator
+ +112 + + + + + + +
  private PublicKeyCredentialRequestOptions(
+ +113 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("challenge") ByteArray challenge,
+ +114 + + + + + + +
      @JsonProperty("timeout") Long timeout,
+ +115 + + + + + + +
      @JsonProperty("rpId") String rpId,
+ +116 + + + + + + +
      @JsonProperty("allowCredentials") List<PublicKeyCredentialDescriptor> allowCredentials,
+ +117 + + + + + + +
      @JsonProperty("userVerification") UserVerificationRequirement userVerification,
+ +118 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("extensions") AssertionExtensionInputs extensions) {
+ +119 + + + + + + +
    this.challenge = challenge;
+ +120 + + + + + + +
    this.timeout = timeout;
+ +121 + + + + + + +
    this.rpId = rpId;
+ +122 + + + + + + +
    this.allowCredentials =
+ +123 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        allowCredentials == null ? null : CollectionUtil.immutableList(allowCredentials);
+ +124 + + + + + + +
    this.userVerification = userVerification;
+ +125 + + + + + + +
    this.extensions = extensions;
+ +126 + + + + + + +
  }
+ +127 + + + + + + +
+ +128 + + + + + + +
  public Optional<Long> getTimeout() {
+ +129 + + +1 + +1. getTimeout : replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getTimeout → KILLED
+ +
+
+
    return Optional.ofNullable(timeout);
+ +130 + + + + + + +
  }
+ +131 + + + + + + +
+ +132 + + + + + + +
  public Optional<List<PublicKeyCredentialDescriptor>> getAllowCredentials() {
+ +133 + + +1 + +1. getAllowCredentials : replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getAllowCredentials → KILLED
+ +
+
+
    return Optional.ofNullable(allowCredentials);
+ +134 + + + + + + +
  }
+ +135 + + + + + + +
+ +136 + + + + + + +
  public Optional<UserVerificationRequirement> getUserVerification() {
+ +137 + + +1 + +1. getUserVerification : replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getUserVerification → KILLED
+ +
+
+
    return Optional.ofNullable(userVerification);
+ +138 + + + + + + +
  }
+ +139 + + + + + + +
+ +140 + + + + + + +
  /**
+ +141 + + + + + + +
   * Serialize this {@link PublicKeyCredentialRequestOptions} value to JSON suitable for sending to
+ +142 + + + + + + +
   * the client.
+ +143 + + + + + + +
   *
+ +144 + + + + + + +
   * <p>Any {@link ByteArray} values in this data structure will be {@link ByteArray#getBase64Url()
+ +145 + + + + + + +
   * Base64Url} encoded. Those values MUST be decoded into <code>BufferSource</code> values (such as
+ +146 + + + + + + +
   * <code>Uint8Array</code>) on the client side before calling <code>navigator.credentials.get()
+ +147 + + + + + + +
   * </code>.
+ +148 + + + + + + +
   *
+ +149 + + + + + + +
   * <p>After decoding binary values, the resulting JavaScript object is suitable for passing as an
+ +150 + + + + + + +
   * argument to <code>navigator.credentials.get()</code>.
+ +151 + + + + + + +
   *
+ +152 + + + + + + +
   * @return a JSON value suitable for sending to the client and passing as an argument to <code>
+ +153 + + + + + + +
   *     navigator.credentials.get()</code>, after decoding binary options from Base64Url strings.
+ +154 + + + + + + +
   * @throws JsonProcessingException if JSON serialization fails.
+ +155 + + + + + + +
   */
+ +156 + + + + + + +
  public String toCredentialsGetJson() throws JsonProcessingException {
+ +157 + + + + + + +
    ObjectMapper json = JacksonCodecs.json();
+ +158 + + + + + + +
    ObjectNode result = json.createObjectNode();
+ +159 + + + + + + +
    result.set("publicKey", json.valueToTree(this));
+ +160 + + +1 + +1. toCredentialsGetJson : replaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::toCredentialsGetJson → KILLED
+ +
+
+
    return json.writeValueAsString(result);
+ +161 + + + + + + +
  }
+ +162 + + + + + + +
+ +163 + + + + + + +
  public static PublicKeyCredentialRequestOptionsBuilder.MandatoryStages builder() {
+ +164 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::builder → KILLED
+ +
+
+
    return new PublicKeyCredentialRequestOptionsBuilder.MandatoryStages();
+ +165 + + + + + + +
  }
+ +166 + + + + + + +
+ +167 + + + + + + +
  public static class PublicKeyCredentialRequestOptionsBuilder {
+ +168 + + + + + + +
    private Long timeout = null;
+ +169 + + + + + + +
    private String rpId = null;
+ +170 + + + + + + +
    private List<PublicKeyCredentialDescriptor> allowCredentials = null;
+ +171 + + + + + + +
+ +172 + + + + + + +
    public static class MandatoryStages {
+ +173 + + + + + + +
      private final PublicKeyCredentialRequestOptionsBuilder builder =
+ +174 + + + + + + +
          new PublicKeyCredentialRequestOptionsBuilder();
+ +175 + + + + + + +
+ +176 + + + + + + +
      /**
+ +177 + + + + + + +
       * {@link PublicKeyCredentialRequestOptionsBuilder#challenge(ByteArray) challenge} is a
+ +178 + + + + + + +
       * required parameter.
+ +179 + + + + + + +
       *
+ +180 + + + + + + +
       * @see PublicKeyCredentialRequestOptionsBuilder#challenge(ByteArray)
+ +181 + + + + + + +
       */
+ +182 + + + + + + +
      public PublicKeyCredentialRequestOptionsBuilder challenge(ByteArray challenge) {
+ +183 + + +1 + +1. challenge : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder$MandatoryStages::challenge → KILLED
+ +
+
+
        return builder.challenge(challenge);
+ +184 + + + + + + +
      }
+ +185 + + + + + + +
    }
+ +186 + + + + + + +
+ +187 + + + + + + +
    /**
+ +188 + + + + + + +
     * Specifies a time, in milliseconds, that the caller is willing to wait for the call to
+ +189 + + + + + + +
     * complete.
+ +190 + + + + + + +
     *
+ +191 + + + + + + +
     * <p>This is treated as a hint, and MAY be overridden by the client.
+ +192 + + + + + + +
     */
+ +193 + + +1 + +1. timeout : negated conditional → KILLED
+ +
+
+
    public PublicKeyCredentialRequestOptionsBuilder timeout(@NonNull Optional<Long> timeout) {
+ +194 + + + + + + +
      this.timeout = timeout.orElse(null);
+ +195 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout → KILLED
+ +
+
+
      return this;
+ +196 + + + + + + +
    }
+ +197 + + + + + + +
+ +198 + + + + + + +
    /*
+ +199 + + + + + + +
     * Workaround, see: https://github.com/rzwitserloot/lombok/issues/2623#issuecomment-714816001
+ +200 + + + + + + +
     * Consider reverting this workaround if Lombok fixes that issue.
+ +201 + + + + + + +
     */
+ +202 + + + + + + +
    private PublicKeyCredentialRequestOptionsBuilder timeout(Long timeout) {
+ +203 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout → KILLED
+ +
+
+
      return this.timeout(Optional.ofNullable(timeout));
+ +204 + + + + + + +
    }
+ +205 + + + + + + +
+ +206 + + + + + + +
    /**
+ +207 + + + + + + +
     * Specifies a time, in milliseconds, that the caller is willing to wait for the call to
+ +208 + + + + + + +
     * complete.
+ +209 + + + + + + +
     *
+ +210 + + + + + + +
     * <p>This is treated as a hint, and MAY be overridden by the client.
+ +211 + + + + + + +
     */
+ +212 + + + + + + +
    public PublicKeyCredentialRequestOptionsBuilder timeout(long timeout) {
+ +213 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout → NO_COVERAGE
+ +
+
+
      return this.timeout(Optional.of(timeout));
+ +214 + + + + + + +
    }
+ +215 + + + + + + +
+ +216 + + + + + + +
    /**
+ +217 + + + + + + +
     * Specifies the relying party identifier claimed by the caller.
+ +218 + + + + + + +
     *
+ +219 + + + + + + +
     * <p>If omitted, its value will be set by the client.
+ +220 + + + + + + +
     */
+ +221 + + +1 + +1. rpId : negated conditional → KILLED
+ +
+
+
    public PublicKeyCredentialRequestOptionsBuilder rpId(@NonNull Optional<String> rpId) {
+ +222 + + +1 + +1. rpId : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::rpId → KILLED
+ +
+
+
      return this.rpId(rpId.orElse(null));
+ +223 + + + + + + +
    }
+ +224 + + + + + + +
+ +225 + + + + + + +
    /**
+ +226 + + + + + + +
     * Specifies the relying party identifier claimed by the caller.
+ +227 + + + + + + +
     *
+ +228 + + + + + + +
     * <p>If omitted, its value will be set by the client.
+ +229 + + + + + + +
     */
+ +230 + + + + + + +
    public PublicKeyCredentialRequestOptionsBuilder rpId(String rpId) {
+ +231 + + + + + + +
      this.rpId = rpId;
+ +232 + + +1 + +1. rpId : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::rpId → KILLED
+ +
+
+
      return this;
+ +233 + + + + + + +
    }
+ +234 + + + + + + +
+ +235 + + + + + + +
    /**
+ +236 + + + + + + +
     * A list of {@link PublicKeyCredentialDescriptor} objects representing public key credentials
+ +237 + + + + + + +
     * acceptable to the caller, in descending order of the caller’s preference (the first item in
+ +238 + + + + + + +
     * the list is the most preferred credential, and so on down the list).
+ +239 + + + + + + +
     */
+ +240 + + + + + + +
    public PublicKeyCredentialRequestOptionsBuilder allowCredentials(
+ +241 + + +1 + +1. allowCredentials : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<List<PublicKeyCredentialDescriptor>> allowCredentials) {
+ +242 + + +1 + +1. allowCredentials : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::allowCredentials → KILLED
+ +
+
+
      return this.allowCredentials(allowCredentials.orElse(null));
+ +243 + + + + + + +
    }
+ +244 + + + + + + +
+ +245 + + + + + + +
    /**
+ +246 + + + + + + +
     * A list of {@link PublicKeyCredentialDescriptor} objects representing public key credentials
+ +247 + + + + + + +
     * acceptable to the caller, in descending order of the caller’s preference (the first item in
+ +248 + + + + + + +
     * the list is the most preferred credential, and so on down the list).
+ +249 + + + + + + +
     */
+ +250 + + + + + + +
    public PublicKeyCredentialRequestOptionsBuilder allowCredentials(
+ +251 + + + + + + +
        List<PublicKeyCredentialDescriptor> allowCredentials) {
+ +252 + + + + + + +
      this.allowCredentials = allowCredentials;
+ +253 + + +1 + +1. allowCredentials : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::allowCredentials → KILLED
+ +
+
+
      return this;
+ +254 + + + + + + +
    }
+ +255 + + + + + + +
  }
+ +256 + + + + + + +
}

Mutations

113 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
118 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
123 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
129 + + + +

1.1
Location : getTimeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getTimeout → KILLED

+
133 + + + +

1.1
Location : getAllowCredentials
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getAllowCredentials → KILLED

+
137 + + + +

1.1
Location : getUserVerification
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getUserVerification → KILLED

+
160 + + + +

1.1
Location : toCredentialsGetJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::toCredentialsGetJson → KILLED

+
164 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::builder → KILLED

+
183 + + + +

1.1
Location : challenge
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder$MandatoryStages::challenge → KILLED

+
193 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
195 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout → KILLED

+
203 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout → KILLED

+
213 + + + +

1.1
Location : timeout
Killed by : none
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout → NO_COVERAGE

+
221 + + + +

1.1
Location : rpId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
222 + + + +

1.1
Location : rpId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::rpId → KILLED

+
232 + + + +

1.1
Location : rpId
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::rpId → KILLED

+
241 + + + +

1.1
Location : allowCredentials
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
242 + + + +

1.1
Location : allowCredentials
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::allowCredentials → KILLED

+
253 + + + +

1.1
Location : allowCredentials
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::allowCredentials → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialType.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialType.java.html new file mode 100644 index 000000000..e6397b296 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/PublicKeyCredentialType.java.html @@ -0,0 +1,1296 @@ + + + + + + + + + +

PublicKeyCredentialType.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +29 + + + + + + +
import java.util.Optional;
+ +30 + + + + + + +
import java.util.stream.Stream;
+ +31 + + + + + + +
import lombok.AllArgsConstructor;
+ +32 + + + + + + +
import lombok.Getter;
+ +33 + + + + + + +
import lombok.NonNull;
+ +34 + + + + + + +
+ +35 + + + + + + +
/**
+ +36 + + + + + + +
 * Defines the valid credential types.
+ +37 + + + + + + +
 *
+ +38 + + + + + + +
 * <p>It is an extensions point; values may be added to it in the future, as more credential types
+ +39 + + + + + + +
 * are defined. The values of this enumeration are used for versioning the Authentication Assertion
+ +40 + + + + + + +
 * and attestation structures according to the type of the authenticator.
+ +41 + + + + + + +
 *
+ +42 + + + + + + +
 * <p>Currently one credential type is defined, namely {@link #PUBLIC_KEY}.
+ +43 + + + + + + +
 *
+ +44 + + + + + + +
 * @see <a
+ +45 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enumdef-publickeycredentialtype">§5.10.2.
+ +46 + + + + + + +
 *     Credential Type Enumeration (enum PublicKeyCredentialType)</a>
+ +47 + + + + + + +
 */
+ +48 + + + + + + +
@AllArgsConstructor
+ +49 + + + + + + +
public enum PublicKeyCredentialType {
+ +50 + + + + + + +
  PUBLIC_KEY("public-key");
+ +51 + + + + + + +
+ +52 + + + + + + +
  @JsonValue @Getter @NonNull private final String id;
+ +53 + + + + + + +
+ +54 + + + + + + +
  /**
+ +55 + + + + + + +
   * Attempt to parse a string as a {@link PublicKeyCredentialType}.
+ +56 + + + + + + +
   *
+ +57 + + + + + + +
   * @param id a {@link String} equal to the {@link #getId() id} of a constant in {@link
+ +58 + + + + + + +
   *     PublicKeyCredentialType}
+ +59 + + + + + + +
   * @return The {@link AuthenticatorAttachment} instance whose {@link #getId() id} equals <code>id
+ +60 + + + + + + +
   *     </code>, if any.
+ +61 + + + + + + +
   * @see <a
+ +62 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enumdef-publickeycredentialtype">§5.10.2.
+ +63 + + + + + + +
   *     Credential Type Enumeration (enum PublicKeyCredentialType)</a>
+ +64 + + + + + + +
   */
+ +65 + + +1 + +1. fromId : negated conditional → KILLED
+ +
+
+
  public static Optional<PublicKeyCredentialType> fromId(@NonNull String id) {
+ +66 + + +3 + +1. fromId : replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialType::fromId → KILLED
+2. lambda$fromId$0 : replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromId$0 → KILLED
+3. lambda$fromId$0 : replaced boolean return with false for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromId$0 → KILLED
+ +
+
+
    return Stream.of(values()).filter(v -> v.id.equals(id)).findAny();
+ +67 + + + + + + +
  }
+ +68 + + + + + + +
+ +69 + + + + + + +
  @JsonCreator
+ +70 + + +1 + +1. fromJsonString : negated conditional → KILLED
+ +
+
+
  private static PublicKeyCredentialType fromJsonString(@NonNull String id) {
+ +71 + + +1 + +1. fromJsonString : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialType::fromJsonString → KILLED
+ +
+
+
    return fromId(id)
+ +72 + + + + + + +
        .orElseThrow(
+ +73 + + + + + + +
            () ->
+ +74 + + +1 + +1. lambda$fromJsonString$1 : replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromJsonString$1 → KILLED
+ +
+
+
                new IllegalArgumentException(
+ +75 + + + + + + +
                    String.format(
+ +76 + + + + + + +
                        "Unknown %s value: %s",
+ +77 + + + + + + +
                        PublicKeyCredentialType.class.getSimpleName(), id)));
+ +78 + + + + + + +
  }
+ +79 + + + + + + +
}

Mutations

65 + + + +

1.1
Location : fromId
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

+
66 + + + +

1.1
Location : fromId
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialType::fromId → KILLED

2.2
Location : lambda$fromId$0
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromId$0 → KILLED

3.3
Location : lambda$fromId$0
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced boolean return with false for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromId$0 → KILLED

+
70 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

+
71 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialType::fromJsonString → KILLED

+
74 + + + +

1.1
Location : lambda$fromJsonString$1
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromJsonString$1 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/RegistrationExtensionInputs.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/RegistrationExtensionInputs.java.html new file mode 100644 index 000000000..b341acd02 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/RegistrationExtensionInputs.java.html @@ -0,0 +1,4800 @@ + + + + + + + + + +

RegistrationExtensionInputs.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +30 + + + + + + +
import com.yubico.webauthn.RelyingParty;
+ +31 + + + + + + +
import com.yubico.webauthn.StartRegistrationOptions;
+ +32 + + + + + + +
import com.yubico.webauthn.extension.appid.AppId;
+ +33 + + + + + + +
import java.util.Collections;
+ +34 + + + + + + +
import java.util.HashSet;
+ +35 + + + + + + +
import java.util.Optional;
+ +36 + + + + + + +
import java.util.Set;
+ +37 + + + + + + +
import lombok.Builder;
+ +38 + + + + + + +
import lombok.Value;
+ +39 + + + + + + +
+ +40 + + + + + + +
/**
+ +41 + + + + + + +
 * Contains <a
+ +42 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-extension-input">client
+ +43 + + + + + + +
 * extension inputs</a> to a <code>navigator.credentials.create()</code> operation. All members are
+ +44 + + + + + + +
 * optional.
+ +45 + + + + + + +
 *
+ +46 + + + + + + +
 * <p>The authenticator extension inputs are derived from these client extension inputs.
+ +47 + + + + + + +
 *
+ +48 + + + + + + +
 * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-extensions">§9. WebAuthn
+ +49 + + + + + + +
 *     Extensions</a>
+ +50 + + + + + + +
 */
+ +51 + + + + + + +
@Value
+ +52 + + + + + + +
@Builder(toBuilder = true)
+ +53 + + + + + + +
@JsonIgnoreProperties(ignoreUnknown = true)
+ +54 + + + + + + +
public final class RegistrationExtensionInputs implements ExtensionInputs {
+ +55 + + + + + + +
+ +56 + + + + + + +
  private final AppId appidExclude;
+ +57 + + + + + + +
  private final Boolean credProps;
+ +58 + + + + + + +
  private final Extensions.LargeBlob.LargeBlobRegistrationInput largeBlob;
+ +59 + + + + + + +
  private final Boolean uvm;
+ +60 + + + + + + +
+ +61 + + + + + + +
  @JsonCreator
+ +62 + + + + + + +
  private RegistrationExtensionInputs(
+ +63 + + + + + + +
      @JsonProperty("appidExclude") AppId appidExclude,
+ +64 + + + + + + +
      @JsonProperty("credProps") Boolean credProps,
+ +65 + + + + + + +
      @JsonProperty("largeBlob") Extensions.LargeBlob.LargeBlobRegistrationInput largeBlob,
+ +66 + + + + + + +
      @JsonProperty("uvm") Boolean uvm) {
+ +67 + + + + + + +
    this.appidExclude = appidExclude;
+ +68 + + + + + + +
    this.credProps = credProps;
+ +69 + + + + + + +
    this.largeBlob = largeBlob;
+ +70 + + + + + + +
    this.uvm = uvm;
+ +71 + + + + + + +
  }
+ +72 + + + + + + +
+ +73 + + + + + + +
  /**
+ +74 + + + + + + +
   * Merge <code>other</code> into <code>this</code>. Non-null field values from <code>this</code>
+ +75 + + + + + + +
   * take precedence.
+ +76 + + + + + + +
   *
+ +77 + + + + + + +
   * @return a new {@link RegistrationExtensionInputs} instance with the settings from both <code>
+ +78 + + + + + + +
   *     this</code> and <code>other</code>.
+ +79 + + + + + + +
   */
+ +80 + + + + + + +
  public RegistrationExtensionInputs merge(RegistrationExtensionInputs other) {
+ +81 + + +1 + +1. merge : replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs::merge → KILLED
+ +
+
+
    return new RegistrationExtensionInputs(
+ +82 + + +1 + +1. merge : negated conditional → KILLED
+ +
+
+
        this.appidExclude != null ? this.appidExclude : other.appidExclude,
+ +83 + + +1 + +1. merge : negated conditional → KILLED
+ +
+
+
        this.credProps != null ? this.credProps : other.credProps,
+ +84 + + +1 + +1. merge : negated conditional → SURVIVED
+ +
+
+
        this.largeBlob != null ? this.largeBlob : other.largeBlob,
+ +85 + + +1 + +1. merge : negated conditional → KILLED
+ +
+
+
        this.uvm != null ? this.uvm : other.uvm);
+ +86 + + + + + + +
  }
+ +87 + + + + + + +
+ +88 + + + + + + +
  /**
+ +89 + + + + + + +
   * @return The value of the FIDO AppID Exclusion Extension (<code>appidExclude</code>) input if
+ +90 + + + + + + +
   *     configured, empty otherwise.
+ +91 + + + + + + +
   * @see RegistrationExtensionInputsBuilder#appidExclude(AppId)
+ +92 + + + + + + +
   * @see <a
+ +93 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.
+ +94 + + + + + + +
   *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +95 + + + + + + +
   */
+ +96 + + + + + + +
  public Optional<AppId> getAppidExclude() {
+ +97 + + +1 + +1. getAppidExclude : replaced return value with Optional.empty for com/yubico/webauthn/data/RegistrationExtensionInputs::getAppidExclude → KILLED
+ +
+
+
    return Optional.ofNullable(appidExclude);
+ +98 + + + + + + +
  }
+ +99 + + + + + + +
+ +100 + + + + + + +
  /**
+ +101 + + + + + + +
   * @return <code>true</code> if the Credential Properties Extension (<code>credProps</code>) is
+ +102 + + + + + + +
   *     enabled, <code>false</code> otherwise.
+ +103 + + + + + + +
   * @see RegistrationExtensionInputsBuilder#credProps()
+ +104 + + + + + + +
   * @see <a
+ +105 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-credential-properties-extension">§10.4.
+ +106 + + + + + + +
   *     Credential Properties Extension (credProps)</a>
+ +107 + + + + + + +
   */
+ +108 + + + + + + +
  public boolean getCredProps() {
+ +109 + + +3 + +1. getCredProps : negated conditional → KILLED
+2. getCredProps : replaced boolean return with true for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredProps → KILLED
+3. getCredProps : negated conditional → KILLED
+ +
+
+
    return credProps != null && credProps;
+ +110 + + + + + + +
  }
+ +111 + + + + + + +
+ +112 + + + + + + +
  /** For JSON serialization, to omit false values. */
+ +113 + + + + + + +
  @JsonProperty("credProps")
+ +114 + + + + + + +
  private Boolean getCredPropsJson() {
+ +115 + + +3 + +1. getCredPropsJson : negated conditional → KILLED
+2. getCredPropsJson : replaced Boolean return with False for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredPropsJson → KILLED
+3. getCredPropsJson : replaced Boolean return with True for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredPropsJson → KILLED
+ +
+
+
    return getCredProps() ? true : null;
+ +116 + + + + + + +
  }
+ +117 + + + + + + +
+ +118 + + + + + + +
  /**
+ +119 + + + + + + +
   * @return The value of the Large blob storage extension (<code>largeBlob</code>) input if
+ +120 + + + + + + +
   *     configured, empty otherwise.
+ +121 + + + + + + +
   * @see
+ +122 + + + + + + +
   *     RegistrationExtensionInputsBuilder#largeBlob(Extensions.LargeBlob.LargeBlobRegistrationInput)
+ +123 + + + + + + +
   * @see
+ +124 + + + + + + +
   *     RegistrationExtensionInputsBuilder#largeBlob(Extensions.LargeBlob.LargeBlobRegistrationInput.LargeBlobSupport)
+ +125 + + + + + + +
   * @see <a
+ +126 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +127 + + + + + + +
   *     Large blob storage extension (largeBlob)</a>
+ +128 + + + + + + +
   */
+ +129 + + + + + + +
  public Optional<Extensions.LargeBlob.LargeBlobRegistrationInput> getLargeBlob() {
+ +130 + + +1 + +1. getLargeBlob : replaced return value with Optional.empty for com/yubico/webauthn/data/RegistrationExtensionInputs::getLargeBlob → KILLED
+ +
+
+
    return Optional.ofNullable(largeBlob);
+ +131 + + + + + + +
  }
+ +132 + + + + + + +
+ +133 + + + + + + +
  /**
+ +134 + + + + + + +
   * @return <code>true</code> if the User Verification Method Extension (<code>uvm</code>) is
+ +135 + + + + + + +
   *     enabled, <code>false</code> otherwise.
+ +136 + + + + + + +
   * @see RegistrationExtensionInputsBuilder#uvm()
+ +137 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">§10.3.
+ +138 + + + + + + +
   *     User Verification Method Extension (uvm)</a>
+ +139 + + + + + + +
   */
+ +140 + + + + + + +
  public boolean getUvm() {
+ +141 + + +3 + +1. getUvm : negated conditional → KILLED
+2. getUvm : negated conditional → KILLED
+3. getUvm : replaced boolean return with true for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvm → KILLED
+ +
+
+
    return uvm != null && uvm;
+ +142 + + + + + + +
  }
+ +143 + + + + + + +
+ +144 + + + + + + +
  /** For JSON serialization, to omit false values. */
+ +145 + + + + + + +
  @JsonProperty("uvm")
+ +146 + + + + + + +
  private Boolean getUvmJson() {
+ +147 + + +3 + +1. getUvmJson : replaced Boolean return with False for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvmJson → KILLED
+2. getUvmJson : replaced Boolean return with True for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvmJson → KILLED
+3. getUvmJson : negated conditional → KILLED
+ +
+
+
    return getUvm() ? true : null;
+ +148 + + + + + + +
  }
+ +149 + + + + + + +
+ +150 + + + + + + +
  /**
+ +151 + + + + + + +
   * @return The extension identifiers of all extensions configured.
+ +152 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-extension-id">§9.1.
+ +153 + + + + + + +
   *     Extension Identifiers</a>
+ +154 + + + + + + +
   */
+ +155 + + + + + + +
  @Override
+ +156 + + + + + + +
  public Set<String> getExtensionIds() {
+ +157 + + + + + + +
    Set<String> ids = new HashSet<>();
+ +158 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (appidExclude != null) {
+ +159 + + + + + + +
      ids.add(Extensions.AppidExclude.EXTENSION_ID);
+ +160 + + + + + + +
    }
+ +161 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (getCredProps()) {
+ +162 + + + + + + +
      ids.add(Extensions.CredentialProperties.EXTENSION_ID);
+ +163 + + + + + + +
    }
+ +164 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (largeBlob != null) {
+ +165 + + + + + + +
      ids.add(Extensions.LargeBlob.EXTENSION_ID);
+ +166 + + + + + + +
    }
+ +167 + + +1 + +1. getExtensionIds : negated conditional → KILLED
+ +
+
+
    if (getUvm()) {
+ +168 + + + + + + +
      ids.add(Extensions.Uvm.EXTENSION_ID);
+ +169 + + + + + + +
    }
+ +170 + + +1 + +1. getExtensionIds : replaced return value with Collections.emptySet for com/yubico/webauthn/data/RegistrationExtensionInputs::getExtensionIds → KILLED
+ +
+
+
    return Collections.unmodifiableSet(ids);
+ +171 + + + + + + +
  }
+ +172 + + + + + + +
+ +173 + + + + + + +
  public static class RegistrationExtensionInputsBuilder {
+ +174 + + + + + + +
    /**
+ +175 + + + + + + +
     * Enable or disable the FIDO AppID Exclusion Extension (<code>appidExclude</code>).
+ +176 + + + + + + +
     *
+ +177 + + + + + + +
     * <p>You usually do not need to call this method explicitly; if {@link RelyingParty#getAppId()}
+ +178 + + + + + + +
     * is present, then {@link RelyingParty#startRegistration(StartRegistrationOptions)} will enable
+ +179 + + + + + + +
     * this extension automatically.
+ +180 + + + + + + +
     *
+ +181 + + + + + + +
     * <p>If this is set to empty, then {@link
+ +182 + + + + + + +
     * RelyingParty#startRegistration(StartRegistrationOptions)} may overwrite it.
+ +183 + + + + + + +
     *
+ +184 + + + + + + +
     * @see RelyingParty#startRegistration(StartRegistrationOptions)
+ +185 + + + + + + +
     * @see <a
+ +186 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.
+ +187 + + + + + + +
     *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +188 + + + + + + +
     */
+ +189 + + + + + + +
    public RegistrationExtensionInputsBuilder appidExclude(Optional<AppId> appidExclude) {
+ +190 + + + + + + +
      this.appidExclude = appidExclude.orElse(null);
+ +191 + + +1 + +1. appidExclude : replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::appidExclude → KILLED
+ +
+
+
      return this;
+ +192 + + + + + + +
    }
+ +193 + + + + + + +
+ +194 + + + + + + +
    /**
+ +195 + + + + + + +
     * Enable the FIDO AppID Exclusion Extension (<code>appidExclude</code>).
+ +196 + + + + + + +
     *
+ +197 + + + + + + +
     * <p>You usually do not need to call this method explicitly; if {@link RelyingParty#getAppId()}
+ +198 + + + + + + +
     * is present, then {@link RelyingParty#startRegistration(StartRegistrationOptions)} will enable
+ +199 + + + + + + +
     * this extension automatically.
+ +200 + + + + + + +
     *
+ +201 + + + + + + +
     * <p>If this is set to null, then {@link
+ +202 + + + + + + +
     * RelyingParty#startRegistration(StartRegistrationOptions)} may overwrite it.
+ +203 + + + + + + +
     *
+ +204 + + + + + + +
     * @see RelyingParty#startRegistration(StartRegistrationOptions)
+ +205 + + + + + + +
     * @see <a
+ +206 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.
+ +207 + + + + + + +
     *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +208 + + + + + + +
     */
+ +209 + + + + + + +
    public RegistrationExtensionInputsBuilder appidExclude(AppId appidExclude) {
+ +210 + + + + + + +
      this.appidExclude = appidExclude;
+ +211 + + +1 + +1. appidExclude : replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::appidExclude → KILLED
+ +
+
+
      return this;
+ +212 + + + + + + +
    }
+ +213 + + + + + + +
+ +214 + + + + + + +
    /**
+ +215 + + + + + + +
     * Enable the Credential Properties (<code>credProps</code>) Extension.
+ +216 + + + + + + +
     *
+ +217 + + + + + + +
     * @see <a
+ +218 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-credential-properties-extension">§10.4.
+ +219 + + + + + + +
     *     Credential Properties Extension (credProps)</a>
+ +220 + + + + + + +
     */
+ +221 + + + + + + +
    public RegistrationExtensionInputsBuilder credProps() {
+ +222 + + + + + + +
      this.credProps = true;
+ +223 + + +1 + +1. credProps : replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::credProps → KILLED
+ +
+
+
      return this;
+ +224 + + + + + + +
    }
+ +225 + + + + + + +
+ +226 + + + + + + +
    /**
+ +227 + + + + + + +
     * Enable or disable the Credential Properties (<code>credProps</code>) Extension.
+ +228 + + + + + + +
     *
+ +229 + + + + + + +
     * <p>A <code>true</code> argument enables the extension. A <code>false</code> argument disables
+ +230 + + + + + + +
     * the extension, and will not be overwritten by {@link
+ +231 + + + + + + +
     * RelyingParty#startRegistration(StartRegistrationOptions)}. A null argument disables the
+ +232 + + + + + + +
     * extension, and will be overwritten by {@link
+ +233 + + + + + + +
     * RelyingParty#startRegistration(StartRegistrationOptions)}.
+ +234 + + + + + + +
     *
+ +235 + + + + + + +
     * @see RelyingParty#startRegistration(StartRegistrationOptions)
+ +236 + + + + + + +
     * @see <a
+ +237 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-credential-properties-extension">§10.4.
+ +238 + + + + + + +
     *     Credential Properties Extension (credProps)</a>
+ +239 + + + + + + +
     */
+ +240 + + + + + + +
    public RegistrationExtensionInputsBuilder credProps(Boolean credProps) {
+ +241 + + + + + + +
      this.credProps = credProps;
+ +242 + + +1 + +1. credProps : replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::credProps → KILLED
+ +
+
+
      return this;
+ +243 + + + + + + +
    }
+ +244 + + + + + + +
+ +245 + + + + + + +
    /**
+ +246 + + + + + + +
     * Enable the Large blob storage extension (<code>largeBlob</code>).
+ +247 + + + + + + +
     *
+ +248 + + + + + + +
     * <p>Alias of <code>largeBlob(new Extensions.LargeBlob.LargeBlobRegistrationInput(support))
+ +249 + + + + + + +
     * </code>.
+ +250 + + + + + + +
     *
+ +251 + + + + + + +
     * @param support an {@link
+ +252 + + + + + + +
     *     com.yubico.webauthn.data.Extensions.LargeBlob.LargeBlobRegistrationInput.LargeBlobSupport}
+ +253 + + + + + + +
     *     value to set as the <code>support</code> attribute of the <code>largeBlob</code>
+ +254 + + + + + + +
     *     extension input.
+ +255 + + + + + + +
     * @see #largeBlob(Extensions.LargeBlob.LargeBlobRegistrationInput)
+ +256 + + + + + + +
     * @see <a
+ +257 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +258 + + + + + + +
     *     Large blob storage extension (largeBlob)</a>
+ +259 + + + + + + +
     */
+ +260 + + + + + + +
    public RegistrationExtensionInputsBuilder largeBlob(
+ +261 + + + + + + +
        Extensions.LargeBlob.LargeBlobRegistrationInput.LargeBlobSupport support) {
+ +262 + + + + + + +
      this.largeBlob = new Extensions.LargeBlob.LargeBlobRegistrationInput(support);
+ +263 + + +1 + +1. largeBlob : replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::largeBlob → KILLED
+ +
+
+
      return this;
+ +264 + + + + + + +
    }
+ +265 + + + + + + +
+ +266 + + + + + + +
    /**
+ +267 + + + + + + +
     * Enable the Large blob storage extension (<code>largeBlob</code>).
+ +268 + + + + + + +
     *
+ +269 + + + + + + +
     * @see #largeBlob(Extensions.LargeBlob.LargeBlobRegistrationInput.LargeBlobSupport)
+ +270 + + + + + + +
     * @see <a
+ +271 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-large-blob-extension">§10.5.
+ +272 + + + + + + +
     *     Large blob storage extension (largeBlob)</a>
+ +273 + + + + + + +
     */
+ +274 + + + + + + +
    public RegistrationExtensionInputsBuilder largeBlob(
+ +275 + + + + + + +
        Extensions.LargeBlob.LargeBlobRegistrationInput largeBlob) {
+ +276 + + + + + + +
      this.largeBlob = largeBlob;
+ +277 + + +1 + +1. largeBlob : replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::largeBlob → KILLED
+ +
+
+
      return this;
+ +278 + + + + + + +
    }
+ +279 + + + + + + +
+ +280 + + + + + + +
    /**
+ +281 + + + + + + +
     * Enable the User Verification Method Extension (<code>uvm</code>).
+ +282 + + + + + + +
     *
+ +283 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-uvm-extension">§10.3.
+ +284 + + + + + + +
     *     User Verification Method Extension (uvm)</a>
+ +285 + + + + + + +
     */
+ +286 + + + + + + +
    public RegistrationExtensionInputsBuilder uvm() {
+ +287 + + + + + + +
      this.uvm = true;
+ +288 + + +1 + +1. uvm : replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::uvm → KILLED
+ +
+
+
      return this;
+ +289 + + + + + + +
    }
+ +290 + + + + + + +
+ +291 + + + + + + +
    /** For compatibility with {@link Builder}(toBuilder = true) */
+ +292 + + + + + + +
    private RegistrationExtensionInputsBuilder uvm(Boolean uvm) {
+ +293 + + + + + + +
      this.uvm = uvm;
+ +294 + + +1 + +1. uvm : replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::uvm → KILLED
+ +
+
+
      return this;
+ +295 + + + + + + +
    }
+ +296 + + + + + + +
  }
+ +297 + + + + + + +
}

Mutations

81 + + + +

1.1
Location : merge
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs::merge → KILLED

+
82 + + + +

1.1
Location : merge
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
83 + + + +

1.1
Location : merge
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
84 + + + +

1.1
Location : merge
Killed by : none
negated conditional → SURVIVED

+
85 + + + +

1.1
Location : merge
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
97 + + + +

1.1
Location : getAppidExclude
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/RegistrationExtensionInputs::getAppidExclude → KILLED

+
109 + + + +

1.1
Location : getCredProps
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

2.2
Location : getCredProps
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced boolean return with true for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredProps → KILLED

3.3
Location : getCredProps
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
115 + + + +

1.1
Location : getCredPropsJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

2.2
Location : getCredPropsJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced Boolean return with False for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredPropsJson → KILLED

3.3
Location : getCredPropsJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced Boolean return with True for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredPropsJson → KILLED

+
130 + + + +

1.1
Location : getLargeBlob
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/RegistrationExtensionInputs::getLargeBlob → KILLED

+
141 + + + +

1.1
Location : getUvm
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

2.2
Location : getUvm
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

3.3
Location : getUvm
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced boolean return with true for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvm → KILLED

+
147 + + + +

1.1
Location : getUvmJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced Boolean return with False for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvmJson → KILLED

2.2
Location : getUvmJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced Boolean return with True for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvmJson → KILLED

3.3
Location : getUvmJson
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
158 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
161 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
164 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
167 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
negated conditional → KILLED

+
170 + + + +

1.1
Location : getExtensionIds
Killed by : com.yubico.webauthn.data.ExtensionsSpec
replaced return value with Collections.emptySet for com/yubico/webauthn/data/RegistrationExtensionInputs::getExtensionIds → KILLED

+
191 + + + +

1.1
Location : appidExclude
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::appidExclude → KILLED

+
211 + + + +

1.1
Location : appidExclude
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::appidExclude → KILLED

+
223 + + + +

1.1
Location : credProps
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::credProps → KILLED

+
242 + + + +

1.1
Location : credProps
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::credProps → KILLED

+
263 + + + +

1.1
Location : largeBlob
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::largeBlob → KILLED

+
277 + + + +

1.1
Location : largeBlob
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::largeBlob → KILLED

+
288 + + + +

1.1
Location : uvm
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::uvm → KILLED

+
294 + + + +

1.1
Location : uvm
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::uvm → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/RelyingPartyIdentity.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/RelyingPartyIdentity.java.html new file mode 100644 index 000000000..e3684d5f5 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/RelyingPartyIdentity.java.html @@ -0,0 +1,1823 @@ + + + + + + + + + +

RelyingPartyIdentity.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import lombok.Builder;
+ +30 + + + + + + +
import lombok.Getter;
+ +31 + + + + + + +
import lombok.NonNull;
+ +32 + + + + + + +
import lombok.Value;
+ +33 + + + + + + +
+ +34 + + + + + + +
/**
+ +35 + + + + + + +
 * Used to supply additional Relying Party attributes when creating a new credential.
+ +36 + + + + + + +
 *
+ +37 + + + + + + +
 * @see <a
+ +38 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-publickeycredentialrpentity">§5.4.2.
+ +39 + + + + + + +
 *     Relying Party Parameters for Credential Generation (dictionary PublicKeyCredentialRpEntity)
+ +40 + + + + + + +
 *     </a>
+ +41 + + + + + + +
 */
+ +42 + + + + + + +
@Value
+ +43 + + + + + + +
@Builder(toBuilder = true)
+ +44 + + + + + + +
public class RelyingPartyIdentity implements PublicKeyCredentialEntity {
+ +45 + + + + + + +
+ +46 + + + + + + +
  /**
+ +47 + + + + + + +
   * The human-palatable name of the Relaying Party.
+ +48 + + + + + + +
   *
+ +49 + + + + + + +
   * <p>For example: "ACME Corporation", "Wonderful Widgets, Inc." or "ОАО Примертех".
+ +50 + + + + + + +
   */
+ +51 + + + + + + +
  @NonNull
+ +52 + + + + + + +
  @Getter(onMethod = @__({@Override}))
+ +53 + + + + + + +
  private final String name;
+ +54 + + + + + + +
+ +55 + + + + + + +
  /**
+ +56 + + + + + + +
   * A unique identifier for the Relying Party, which sets the <a
+ +57 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#rp-id">RP ID</a>.
+ +58 + + + + + + +
   *
+ +59 + + + + + + +
   * <p>This defines the domains where users' credentials are valid. See <a
+ +60 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#scope">RP ID: scope</a> for details
+ +61 + + + + + + +
   * and examples.
+ +62 + + + + + + +
   *
+ +63 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#rp-id">RP ID</a>
+ +64 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#scope">RP ID: scope</a>
+ +65 + + + + + + +
   */
+ +66 + + + + + + +
  @NonNull private final String id;
+ +67 + + + + + + +
+ +68 + + + + + + +
  @JsonCreator
+ +69 + + + + + + +
  private RelyingPartyIdentity(
+ +70 + + +2 + +1. <init> : negated conditional → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("name") String name, @NonNull @JsonProperty("id") String id) {
+ +71 + + + + + + +
    this.name = name;
+ +72 + + + + + + +
    this.id = id;
+ +73 + + + + + + +
  }
+ +74 + + + + + + +
+ +75 + + + + + + +
  public static RelyingPartyIdentityBuilder.MandatoryStages builder() {
+ +76 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity::builder → KILLED
+ +
+
+
    return new RelyingPartyIdentityBuilder.MandatoryStages();
+ +77 + + + + + + +
  }
+ +78 + + + + + + +
+ +79 + + + + + + +
  public static class RelyingPartyIdentityBuilder {
+ +80 + + + + + + +
+ +81 + + + + + + +
    public static class MandatoryStages {
+ +82 + + + + + + +
      private final RelyingPartyIdentityBuilder builder = new RelyingPartyIdentityBuilder();
+ +83 + + + + + + +
+ +84 + + + + + + +
      /**
+ +85 + + + + + + +
       * A unique identifier for the Relying Party, which sets the <a
+ +86 + + + + + + +
       * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#rp-id">RP ID</a>.
+ +87 + + + + + + +
       *
+ +88 + + + + + + +
       * <p>This defines the domains where users' credentials are valid. See <a
+ +89 + + + + + + +
       * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#scope">RP ID: scope</a> for
+ +90 + + + + + + +
       * details and examples.
+ +91 + + + + + + +
       *
+ +92 + + + + + + +
       * @see RelyingPartyIdentityBuilder#id(String)
+ +93 + + + + + + +
       * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#rp-id">RP ID</a>
+ +94 + + + + + + +
       * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#scope">RP ID: scope</a>
+ +95 + + + + + + +
       */
+ +96 + + + + + + +
      public Step2 id(String id) {
+ +97 + + + + + + +
        builder.id(id);
+ +98 + + +1 + +1. id : replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages::id → KILLED
+ +
+
+
        return new Step2();
+ +99 + + + + + + +
      }
+ +100 + + + + + + +
+ +101 + + + + + + +
      public class Step2 {
+ +102 + + + + + + +
        /**
+ +103 + + + + + + +
         * The human-palatable name of the Relaying Party.
+ +104 + + + + + + +
         *
+ +105 + + + + + + +
         * <p>For example: "ACME Corporation", "Wonderful Widgets, Inc." or "ОАО Примертех".
+ +106 + + + + + + +
         *
+ +107 + + + + + + +
         * @see RelyingPartyIdentityBuilder#name(String)
+ +108 + + + + + + +
         */
+ +109 + + + + + + +
        public RelyingPartyIdentityBuilder name(String name) {
+ +110 + + +1 + +1. name : replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages$Step2::name → KILLED
+ +
+
+
          return builder.name(name);
+ +111 + + + + + + +
        }
+ +112 + + + + + + +
      }
+ +113 + + + + + + +
    }
+ +114 + + + + + + +
  }
+ +115 + + + + + + +
}

Mutations

70 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)
negated conditional → KILLED

+
76 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)
replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity::builder → KILLED

+
98 + + + +

1.1
Location : id
Killed by : com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)
replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages::id → KILLED

+
110 + + + +

1.1
Location : name
Killed by : com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)
replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages$Step2::name → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ResidentKeyRequirement.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ResidentKeyRequirement.java.html new file mode 100644 index 000000000..99aeb68a7 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/ResidentKeyRequirement.java.html @@ -0,0 +1,2106 @@ + + + + + + + + + +

ResidentKeyRequirement.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2021, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +29 + + + + + + +
import java.util.Optional;
+ +30 + + + + + + +
import java.util.stream.Stream;
+ +31 + + + + + + +
import lombok.AllArgsConstructor;
+ +32 + + + + + + +
import lombok.Getter;
+ +33 + + + + + + +
import lombok.NonNull;
+ +34 + + + + + + +
+ +35 + + + + + + +
/**
+ +36 + + + + + + +
 * This enumeration's values describe the Relying Party's requirements for client-side discoverable
+ +37 + + + + + + +
 * credentials, also known as <i>passkeys</i> (formerly known as resident credentials or resident
+ +38 + + + + + + +
 * keys).
+ +39 + + + + + + +
 *
+ +40 + + + + + + +
 * @see <a
+ +41 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-residentKeyRequirement">§5.4.6.
+ +42 + + + + + + +
 *     Resident Key Requirement Enumeration (enum ResidentKeyRequirement)</a>
+ +43 + + + + + + +
 * @see <a
+ +44 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-credential">Client-side
+ +45 + + + + + + +
 *     discoverable Credential</a>
+ +46 + + + + + + +
 * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +47 + + + + + + +
 *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +48 + + + + + + +
 */
+ +49 + + + + + + +
@AllArgsConstructor
+ +50 + + + + + + +
public enum ResidentKeyRequirement {
+ +51 + + + + + + +
+ +52 + + + + + + +
  /**
+ +53 + + + + + + +
   * The client and authenticator will try to create a server-side credential if possible, and a
+ +54 + + + + + + +
   * discoverable credential (passkey) otherwise.
+ +55 + + + + + + +
   *
+ +56 + + + + + + +
   * @see <a
+ +57 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-residentKeyRequirement">§5.4.6.
+ +58 + + + + + + +
   *     Resident Key Requirement Enumeration (enum ResidentKeyRequirement)</a>
+ +59 + + + + + + +
   * @see <a
+ +60 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-credential">Client-side
+ +61 + + + + + + +
   *     discoverable Credential</a>
+ +62 + + + + + + +
   * @see <a
+ +63 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#server-side-credential">Server-side
+ +64 + + + + + + +
   *     Credential</a>
+ +65 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +66 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +67 + + + + + + +
   */
+ +68 + + + + + + +
  DISCOURAGED("discouraged"),
+ +69 + + + + + + +
+ +70 + + + + + + +
  /**
+ +71 + + + + + + +
   * The client and authenticator will try to create a discoverable credential (passkey) if
+ +72 + + + + + + +
   * possible, and a server-side credential otherwise.
+ +73 + + + + + + +
   *
+ +74 + + + + + + +
   * @see <a
+ +75 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-residentKeyRequirement">§5.4.6.
+ +76 + + + + + + +
   *     Resident Key Requirement Enumeration (enum ResidentKeyRequirement)</a>
+ +77 + + + + + + +
   * @see <a
+ +78 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-credential">Client-side
+ +79 + + + + + + +
   *     discoverable Credential</a>
+ +80 + + + + + + +
   * @see <a
+ +81 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#server-side-credential">Server-side
+ +82 + + + + + + +
   *     Credential</a>
+ +83 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +84 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +85 + + + + + + +
   */
+ +86 + + + + + + +
  PREFERRED("preferred"),
+ +87 + + + + + + +
+ +88 + + + + + + +
  /**
+ +89 + + + + + + +
   * The client and authenticator will try to create a discoverable credential (passkey), and fail
+ +90 + + + + + + +
   * the registration if that is not possible.
+ +91 + + + + + + +
   *
+ +92 + + + + + + +
   * @see <a
+ +93 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-residentKeyRequirement">§5.4.6.
+ +94 + + + + + + +
   *     Resident Key Requirement Enumeration (enum ResidentKeyRequirement)</a>
+ +95 + + + + + + +
   * @see <a
+ +96 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-credential">Client-side
+ +97 + + + + + + +
   *     discoverable Credential</a>
+ +98 + + + + + + +
   * @see <a
+ +99 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#server-side-credential">Server-side
+ +100 + + + + + + +
   *     Credential</a>
+ +101 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +102 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +103 + + + + + + +
   */
+ +104 + + + + + + +
  REQUIRED("required");
+ +105 + + + + + + +
+ +106 + + + + + + +
  @JsonValue @Getter @NonNull private final String value;
+ +107 + + + + + + +
+ +108 + + + + + + +
  /**
+ +109 + + + + + + +
   * Attempt to parse a string as a {@link ResidentKeyRequirement}.
+ +110 + + + + + + +
   *
+ +111 + + + + + + +
   * @param value a {@link String} equal to the {@link #getValue() value} of a constant in {@link
+ +112 + + + + + + +
   *     ResidentKeyRequirement}
+ +113 + + + + + + +
   * @return The {@link ResidentKeyRequirement} instance whose {@link #getValue() value} equals
+ +114 + + + + + + +
   *     <code>value</code>, if any.
+ +115 + + + + + + +
   * @see <a
+ +116 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enum-residentKeyRequirement">§5.4.6.
+ +117 + + + + + + +
   *     Resident Key Requirement Enumeration (enum ResidentKeyRequirement)</a>
+ +118 + + + + + + +
   */
+ +119 + + +1 + +1. fromValue : negated conditional → KILLED
+ +
+
+
  public static Optional<ResidentKeyRequirement> fromValue(@NonNull String value) {
+ +120 + + +3 + +1. fromValue : replaced return value with Optional.empty for com/yubico/webauthn/data/ResidentKeyRequirement::fromValue → KILLED
+2. lambda$fromValue$0 : replaced boolean return with true for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromValue$0 → KILLED
+3. lambda$fromValue$0 : replaced boolean return with false for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromValue$0 → KILLED
+ +
+
+
    return Stream.of(values()).filter(v -> v.value.equals(value)).findAny();
+ +121 + + + + + + +
  }
+ +122 + + + + + + +
+ +123 + + + + + + +
  @JsonCreator
+ +124 + + +1 + +1. fromJsonString : negated conditional → KILLED
+ +
+
+
  private static ResidentKeyRequirement fromJsonString(@NonNull String value) {
+ +125 + + +1 + +1. fromJsonString : replaced return value with null for com/yubico/webauthn/data/ResidentKeyRequirement::fromJsonString → KILLED
+ +
+
+
    return fromValue(value)
+ +126 + + + + + + +
        .orElseThrow(
+ +127 + + + + + + +
            () ->
+ +128 + + +1 + +1. lambda$fromJsonString$1 : replaced return value with null for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromJsonString$1 → KILLED
+ +
+
+
                new IllegalArgumentException(
+ +129 + + + + + + +
                    String.format(
+ +130 + + + + + + +
                        "Unknown %s value: %s",
+ +131 + + + + + + +
                        ResidentKeyRequirement.class.getSimpleName(), value)));
+ +132 + + + + + + +
  }
+ +133 + + + + + + +
}

Mutations

119 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
negated conditional → KILLED

+
120 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
replaced return value with Optional.empty for com/yubico/webauthn/data/ResidentKeyRequirement::fromValue → KILLED

2.2
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
replaced boolean return with true for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromValue$0 → KILLED

3.3
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
replaced boolean return with false for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromValue$0 → KILLED

+
124 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
negated conditional → KILLED

+
125 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)
replaced return value with null for com/yubico/webauthn/data/ResidentKeyRequirement::fromJsonString → KILLED

+
128 + + + +

1.1
Location : lambda$fromJsonString$1
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromJsonString$1 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/TokenBindingInfo.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/TokenBindingInfo.java.html new file mode 100644 index 000000000..aa9058113 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/TokenBindingInfo.java.html @@ -0,0 +1,1444 @@ + + + + + + + + + +

TokenBindingInfo.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import static com.yubico.internal.util.ExceptionUtil.assertTrue;
+ +28 + + + + + + +
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +30 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +31 + + + + + + +
import java.util.Optional;
+ +32 + + + + + + +
import lombok.NonNull;
+ +33 + + + + + + +
import lombok.Value;
+ +34 + + + + + + +
+ +35 + + + + + + +
/**
+ +36 + + + + + + +
 * Information about the state of the <a href="https://tools.ietf.org/html/rfc8471">Token Binding
+ +37 + + + + + + +
 * protocol</a> used when communicating with the Relying Party.
+ +38 + + + + + + +
 *
+ +39 + + + + + + +
 * @see <a
+ +40 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-tokenbinding">dictionary
+ +41 + + + + + + +
 *     TokenBinding</a>
+ +42 + + + + + + +
 */
+ +43 + + + + + + +
@Value
+ +44 + + + + + + +
public class TokenBindingInfo {
+ +45 + + + + + + +
+ +46 + + + + + + +
  @NonNull private final TokenBindingStatus status;
+ +47 + + + + + + +
+ +48 + + + + + + +
  /**
+ +49 + + + + + + +
   * This member MUST be present if {@link #status} is {@link TokenBindingStatus#PRESENT PRESENT},
+ +50 + + + + + + +
   * and MUST be the Token Binding ID that was used when communicating with the Relying Party.
+ +51 + + + + + + +
   */
+ +52 + + + + + + +
  private final ByteArray id;
+ +53 + + + + + + +
+ +54 + + + + + + +
  @JsonCreator
+ +55 + + + + + + +
  TokenBindingInfo(
+ +56 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("status") TokenBindingStatus status,
+ +57 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("id") Optional<ByteArray> id) {
+ +58 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    if (status == TokenBindingStatus.PRESENT) {
+ +59 + + +1 + +1. <init> : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+ +
+
+
      assertTrue(
+ +60 + + + + + + +
          id.isPresent(),
+ +61 + + + + + + +
          "Token binding ID must be present if status is \"%s\".",
+ +62 + + + + + + +
          TokenBindingStatus.PRESENT);
+ +63 + + + + + + +
    } else {
+ +64 + + +1 + +1. <init> : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+ +
+
+
      assertTrue(
+ +65 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
          !id.isPresent(),
+ +66 + + + + + + +
          "Token binding ID must not be present if status is not \"%s\".",
+ +67 + + + + + + +
          TokenBindingStatus.PRESENT);
+ +68 + + + + + + +
    }
+ +69 + + + + + + +
+ +70 + + + + + + +
    this.status = status;
+ +71 + + + + + + +
    this.id = id.orElse(null);
+ +72 + + + + + + +
  }
+ +73 + + + + + + +
+ +74 + + +1 + +1. present : negated conditional → KILLED
+ +
+
+
  public static TokenBindingInfo present(@NonNull ByteArray id) {
+ +75 + + +1 + +1. present : replaced return value with null for com/yubico/webauthn/data/TokenBindingInfo::present → KILLED
+ +
+
+
    return new TokenBindingInfo(TokenBindingStatus.PRESENT, Optional.of(id));
+ +76 + + + + + + +
  }
+ +77 + + + + + + +
+ +78 + + + + + + +
  public static TokenBindingInfo supported() {
+ +79 + + +1 + +1. supported : replaced return value with null for com/yubico/webauthn/data/TokenBindingInfo::supported → SURVIVED
+ +
+
+
    return new TokenBindingInfo(TokenBindingStatus.SUPPORTED, Optional.empty());
+ +80 + + + + + + +
  }
+ +81 + + + + + + +
+ +82 + + + + + + +
  public Optional<ByteArray> getId() {
+ +83 + + +1 + +1. getId : replaced return value with Optional.empty for com/yubico/webauthn/data/TokenBindingInfo::getId → KILLED
+ +
+
+
    return Optional.ofNullable(id);
+ +84 + + + + + + +
  }
+ +85 + + + + + + +
}

Mutations

56 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

+
57 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

+
58 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

+
59 + + + +

1.1
Location : <init>
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
64 + + + +

1.1
Location : <init>
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
65 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
74 + + + +

1.1
Location : present
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

+
75 + + + +

1.1
Location : present
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
replaced return value with null for com/yubico/webauthn/data/TokenBindingInfo::present → KILLED

+
79 + + + +

1.1
Location : supported
Killed by : none
replaced return value with null for com/yubico/webauthn/data/TokenBindingInfo::supported → SURVIVED

+
83 + + + +

1.1
Location : getId
Killed by : com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/TokenBindingInfo::getId → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/TokenBindingStatus.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/TokenBindingStatus.java.html new file mode 100644 index 000000000..9c7c67451 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/TokenBindingStatus.java.html @@ -0,0 +1,1386 @@ + + + + + + + + + +

TokenBindingStatus.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +29 + + + + + + +
import java.util.Arrays;
+ +30 + + + + + + +
import java.util.Optional;
+ +31 + + + + + + +
import lombok.AllArgsConstructor;
+ +32 + + + + + + +
import lombok.Getter;
+ +33 + + + + + + +
import lombok.NonNull;
+ +34 + + + + + + +
+ +35 + + + + + + +
/**
+ +36 + + + + + + +
 * Indicators of whether a {@link TokenBindingInfo}'s {@link TokenBindingInfo#getId() id} member is
+ +37 + + + + + + +
 * present and, if not, whether the client supports token binding.
+ +38 + + + + + + +
 *
+ +39 + + + + + + +
 * @see <a
+ +40 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enumdef-tokenbindingstatus">enum
+ +41 + + + + + + +
 *     TokenBindingStatus</a>
+ +42 + + + + + + +
 * @see TokenBindingInfo
+ +43 + + + + + + +
 */
+ +44 + + + + + + +
@AllArgsConstructor
+ +45 + + + + + + +
public enum TokenBindingStatus {
+ +46 + + + + + + +
+ +47 + + + + + + +
  /**
+ +48 + + + + + + +
   * Indicates token binding was used when communicating with the Relying Party. In this case, the
+ +49 + + + + + + +
   * {@link TokenBindingInfo#getId()} member MUST be present.
+ +50 + + + + + + +
   */
+ +51 + + + + + + +
  PRESENT("present"),
+ +52 + + + + + + +
+ +53 + + + + + + +
  /**
+ +54 + + + + + + +
   * Indicates the client supports token binding, but it was not negotiated when communicating with
+ +55 + + + + + + +
   * the Relying Party.
+ +56 + + + + + + +
   */
+ +57 + + + + + + +
  SUPPORTED("supported");
+ +58 + + + + + + +
+ +59 + + + + + + +
  @JsonValue @Getter @NonNull private final String value;
+ +60 + + + + + + +
+ +61 + + + + + + +
  /**
+ +62 + + + + + + +
   * Attempt to parse a string as a {@link TokenBindingStatus}.
+ +63 + + + + + + +
   *
+ +64 + + + + + + +
   * @param value a {@link String} equal to the {@link #getValue() value} of a constant in {@link
+ +65 + + + + + + +
   *     TokenBindingStatus}
+ +66 + + + + + + +
   * @return The {@link TokenBindingStatus} instance whose {@link #getValue() value} equals <code>
+ +67 + + + + + + +
   *     value</code>, if any.
+ +68 + + + + + + +
   * @see <a
+ +69 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enumdef-tokenbindingstatus">enum
+ +70 + + + + + + +
   *     TokenBindingStatus</a>
+ +71 + + + + + + +
   */
+ +72 + + +1 + +1. fromValue : negated conditional → KILLED
+ +
+
+
  public static Optional<TokenBindingStatus> fromValue(@NonNull String value) {
+ +73 + + +3 + +1. fromValue : replaced return value with Optional.empty for com/yubico/webauthn/data/TokenBindingStatus::fromValue → KILLED
+2. lambda$fromValue$0 : replaced boolean return with true for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromValue$0 → KILLED
+3. lambda$fromValue$0 : replaced boolean return with false for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromValue$0 → KILLED
+ +
+
+
    return Arrays.stream(values()).filter(v -> v.value.equals(value)).findAny();
+ +74 + + + + + + +
  }
+ +75 + + + + + + +
+ +76 + + + + + + +
  @JsonCreator
+ +77 + + +1 + +1. fromJsonString : negated conditional → KILLED
+ +
+
+
  static TokenBindingStatus fromJsonString(@NonNull String value) {
+ +78 + + +1 + +1. fromJsonString : replaced return value with null for com/yubico/webauthn/data/TokenBindingStatus::fromJsonString → KILLED
+ +
+
+
    return fromValue(value)
+ +79 + + + + + + +
        .orElseThrow(
+ +80 + + + + + + +
            () ->
+ +81 + + +1 + +1. lambda$fromJsonString$1 : replaced return value with null for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromJsonString$1 → NO_COVERAGE
+ +
+
+
                new IllegalArgumentException(
+ +82 + + + + + + +
                    String.format(
+ +83 + + + + + + +
                        "Unknown %s value: %s", TokenBindingStatus.class.getSimpleName(), value)));
+ +84 + + + + + + +
  }
+ +85 + + + + + + +
}

Mutations

72 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

+
73 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/TokenBindingStatus::fromValue → KILLED

2.2
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced boolean return with true for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromValue$0 → KILLED

3.3
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
replaced boolean return with false for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromValue$0 → KILLED

+
77 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
negated conditional → KILLED

+
78 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.CollectedClientDataSpec
replaced return value with null for com/yubico/webauthn/data/TokenBindingStatus::fromJsonString → KILLED

+
81 + + + +

1.1
Location : lambda$fromJsonString$1
Killed by : none
replaced return value with null for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromJsonString$1 → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/UserIdentity.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/UserIdentity.java.html new file mode 100644 index 000000000..0890da260 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/UserIdentity.java.html @@ -0,0 +1,2488 @@ + + + + + + + + + +

UserIdentity.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import lombok.Builder;
+ +30 + + + + + + +
import lombok.Getter;
+ +31 + + + + + + +
import lombok.NonNull;
+ +32 + + + + + + +
import lombok.Value;
+ +33 + + + + + + +
+ +34 + + + + + + +
/**
+ +35 + + + + + + +
 * Describes a user account, with which public key credentials can be associated.
+ +36 + + + + + + +
 *
+ +37 + + + + + + +
 * @see <a
+ +38 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictdef-publickeycredentialuserentity">§5.4.3.
+ +39 + + + + + + +
 *     User Account Parameters for Credential Generation (dictionary PublicKeyCredentialUserEntity)
+ +40 + + + + + + +
 *     </a>
+ +41 + + + + + + +
 */
+ +42 + + + + + + +
@Value
+ +43 + + + + + + +
@Builder(toBuilder = true)
+ +44 + + + + + + +
public class UserIdentity implements PublicKeyCredentialEntity {
+ +45 + + + + + + +
+ +46 + + + + + + +
  /**
+ +47 + + + + + + +
   * A human-palatable identifier for a user account. It is intended only for display, i.e., aiding
+ +48 + + + + + + +
   * the user in determining the difference between user accounts with similar {@link
+ +49 + + + + + + +
   * #displayName}s.
+ +50 + + + + + + +
   *
+ +51 + + + + + + +
   * <p>For example: "alexm", "alex.p.mueller@example.com" or "+14255551234".
+ +52 + + + + + + +
   */
+ +53 + + + + + + +
  @NonNull
+ +54 + + + + + + +
  @Getter(onMethod = @__({@Override}))
+ +55 + + + + + + +
  private final String name;
+ +56 + + + + + + +
+ +57 + + + + + + +
  /**
+ +58 + + + + + + +
   * A human-palatable name for the user account, intended only for display. For example, "Alex P.
+ +59 + + + + + + +
   * Müller" or "田中 倫". The Relying Party SHOULD let the user choose this, and SHOULD NOT restrict
+ +60 + + + + + + +
   * the choice more than necessary.
+ +61 + + + + + + +
   *
+ +62 + + + + + + +
   * <ul>
+ +63 + + + + + + +
   *   <li>Relying Parties SHOULD perform enforcement, as prescribed in Section 2.3 of [RFC8266] for
+ +64 + + + + + + +
   *       the Nickname Profile of the PRECIS FreeformClass [RFC8264], when setting {@link
+ +65 + + + + + + +
   *       #displayName}'s value, or displaying the value to the user.
+ +66 + + + + + + +
   *   <li>Clients SHOULD perform enforcement, as prescribed in Section 2.3 of [RFC8266] for the
+ +67 + + + + + + +
   *       Nickname Profile of the PRECIS FreeformClass [RFC8264], on {@link #displayName}'s value
+ +68 + + + + + + +
   *       prior to displaying the value to the user or including the value as a parameter of the
+ +69 + + + + + + +
   *       <code>authenticatorMakeCredential</code> operation.
+ +70 + + + + + + +
   * </ul>
+ +71 + + + + + + +
   *
+ +72 + + + + + + +
   * <p>When clients, client platforms, or authenticators display a {@link #displayName}'s value,
+ +73 + + + + + + +
   * they should always use UI elements to provide a clear boundary around the displayed value, and
+ +74 + + + + + + +
   * not allow overflow into other elements.
+ +75 + + + + + + +
   *
+ +76 + + + + + + +
   * <p>Authenticators MUST accept and store a 64-byte minimum length for a {@link #displayName}
+ +77 + + + + + + +
   * member's value. Authenticators MAY truncate a {@link #displayName} member's value to a length
+ +78 + + + + + + +
   * equal to or greater than 64 bytes.
+ +79 + + + + + + +
   *
+ +80 + + + + + + +
   * @see <a href="https://tools.ietf.org/html/rfc8264">RFC 8264</a>
+ +81 + + + + + + +
   * @see <a href="https://tools.ietf.org/html/rfc8266">RFC 8266</a>
+ +82 + + + + + + +
   */
+ +83 + + + + + + +
  @NonNull private final String displayName;
+ +84 + + + + + + +
+ +85 + + + + + + +
  /**
+ +86 + + + + + + +
   * The <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-handle">user handle</a>
+ +87 + + + + + + +
   * for the account, specified by the Relying Party.
+ +88 + + + + + + +
   *
+ +89 + + + + + + +
   * <p>A user handle is an opaque byte sequence with a maximum size of 64 bytes. User handles are
+ +90 + + + + + + +
   * not meant to be displayed to users. The user handle SHOULD NOT contain personally identifying
+ +91 + + + + + + +
   * information about the user, such as a username or e-mail address; see <a
+ +92 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-user-handle-privacy">§14.9 User
+ +93 + + + + + + +
   * Handle Contents</a> for details.
+ +94 + + + + + + +
   *
+ +95 + + + + + + +
   * <p>To ensure secure operation, authentication and authorization decisions MUST be made on the
+ +96 + + + + + + +
   * basis of this {@link #id} member, not the {@link #displayName} nor {@link #name} members. See
+ +97 + + + + + + +
   * <a href="https://tools.ietf.org/html/rfc8266#section-6.1">Section 6.1 of RFC 8266</a>.
+ +98 + + + + + + +
   *
+ +99 + + + + + + +
   * <p>An authenticator will never contain more than one credential for a given Relying Party under
+ +100 + + + + + + +
   * the same user handle.
+ +101 + + + + + + +
   */
+ +102 + + + + + + +
  @NonNull private final ByteArray id;
+ +103 + + + + + + +
+ +104 + + + + + + +
  @JsonCreator
+ +105 + + + + + + +
  private UserIdentity(
+ +106 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("name") String name,
+ +107 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("displayName") String displayName,
+ +108 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("id") ByteArray id) {
+ +109 + + + + + + +
    this.name = name;
+ +110 + + + + + + +
    this.displayName = displayName;
+ +111 + + + + + + +
    this.id = id;
+ +112 + + + + + + +
  }
+ +113 + + + + + + +
+ +114 + + + + + + +
  public static UserIdentityBuilder.MandatoryStages builder() {
+ +115 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/data/UserIdentity::builder → KILLED
+ +
+
+
    return new UserIdentityBuilder.MandatoryStages();
+ +116 + + + + + + +
  }
+ +117 + + + + + + +
+ +118 + + + + + + +
  public static class UserIdentityBuilder {
+ +119 + + + + + + +
+ +120 + + + + + + +
    public static class MandatoryStages {
+ +121 + + + + + + +
      private final UserIdentityBuilder builder = new UserIdentityBuilder();
+ +122 + + + + + + +
+ +123 + + + + + + +
      /**
+ +124 + + + + + + +
       * {@link UserIdentityBuilder#name(String) name} is a required parameter.
+ +125 + + + + + + +
       *
+ +126 + + + + + + +
       * @see UserIdentityBuilder#name(String)
+ +127 + + + + + + +
       */
+ +128 + + + + + + +
      public Step2 name(String name) {
+ +129 + + + + + + +
        builder.name(name);
+ +130 + + +1 + +1. name : replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages::name → KILLED
+ +
+
+
        return new Step2();
+ +131 + + + + + + +
      }
+ +132 + + + + + + +
+ +133 + + + + + + +
      public class Step2 {
+ +134 + + + + + + +
        /**
+ +135 + + + + + + +
         * {@link UserIdentityBuilder#displayName(String) displayName} is a required parameter.
+ +136 + + + + + + +
         *
+ +137 + + + + + + +
         * @see UserIdentityBuilder#displayName(String)
+ +138 + + + + + + +
         */
+ +139 + + + + + + +
        public Step3 displayName(String displayName) {
+ +140 + + + + + + +
          builder.displayName(displayName);
+ +141 + + +1 + +1. displayName : replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step2::displayName → KILLED
+ +
+
+
          return new Step3();
+ +142 + + + + + + +
        }
+ +143 + + + + + + +
      }
+ +144 + + + + + + +
+ +145 + + + + + + +
      public class Step3 {
+ +146 + + + + + + +
        /**
+ +147 + + + + + + +
         * {@link UserIdentityBuilder#id(ByteArray) id} is a required parameter.
+ +148 + + + + + + +
         *
+ +149 + + + + + + +
         * @see UserIdentityBuilder#id(ByteArray)
+ +150 + + + + + + +
         */
+ +151 + + + + + + +
        public UserIdentityBuilder id(ByteArray id) {
+ +152 + + +1 + +1. id : replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step3::id → KILLED
+ +
+
+
          return builder.id(id);
+ +153 + + + + + + +
        }
+ +154 + + + + + + +
      }
+ +155 + + + + + + +
    }
+ +156 + + + + + + +
  }
+ +157 + + + + + + +
}

Mutations

106 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)
negated conditional → KILLED

+
107 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)
negated conditional → KILLED

+
108 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)
negated conditional → KILLED

+
115 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)
replaced return value with null for com/yubico/webauthn/data/UserIdentity::builder → KILLED

+
130 + + + +

1.1
Location : name
Killed by : com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)
replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages::name → KILLED

+
141 + + + +

1.1
Location : displayName
Killed by : com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)
replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step2::displayName → KILLED

+
152 + + + +

1.1
Location : id
Killed by : com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)
replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step3::id → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/UserVerificationRequirement.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/UserVerificationRequirement.java.html new file mode 100644 index 000000000..0c1ced8a5 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/UserVerificationRequirement.java.html @@ -0,0 +1,1521 @@ + + + + + + + + + +

UserVerificationRequirement.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.data;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +29 + + + + + + +
import java.util.Optional;
+ +30 + + + + + + +
import java.util.stream.Stream;
+ +31 + + + + + + +
import lombok.AllArgsConstructor;
+ +32 + + + + + + +
import lombok.Getter;
+ +33 + + + + + + +
import lombok.NonNull;
+ +34 + + + + + + +
+ +35 + + + + + + +
/**
+ +36 + + + + + + +
 * A WebAuthn Relying Party may require <a
+ +37 + + + + + + +
 * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-verification">user
+ +38 + + + + + + +
 * verification</a> for some of its operations but not for others, and may use this type to express
+ +39 + + + + + + +
 * its needs.
+ +40 + + + + + + +
 *
+ +41 + + + + + + +
 * @see <a
+ +42 + + + + + + +
 *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enumdef-userverificationrequirement">§5.10.6.
+ +43 + + + + + + +
 *     User Verification Requirement Enumeration (enum UserVerificationRequirement)</a>
+ +44 + + + + + + +
 */
+ +45 + + + + + + +
@AllArgsConstructor
+ +46 + + + + + + +
public enum UserVerificationRequirement {
+ +47 + + + + + + +
+ +48 + + + + + + +
  /**
+ +49 + + + + + + +
   * This value indicates that the Relying Party does not want user verification employed during the
+ +50 + + + + + + +
   * operation (e.g., in the interest of minimizing disruption to the user interaction flow).
+ +51 + + + + + + +
   */
+ +52 + + + + + + +
  DISCOURAGED("discouraged"),
+ +53 + + + + + + +
+ +54 + + + + + + +
  /**
+ +55 + + + + + + +
   * This value indicates that the Relying Party prefers user verification for the operation if
+ +56 + + + + + + +
   * possible, but will not fail the operation if the response does not have the {@link
+ +57 + + + + + + +
   * AuthenticatorDataFlags#UV} flag set.
+ +58 + + + + + + +
   */
+ +59 + + + + + + +
  PREFERRED("preferred"),
+ +60 + + + + + + +
+ +61 + + + + + + +
  /**
+ +62 + + + + + + +
   * Indicates that the Relying Party requires user verification for the operation and will fail the
+ +63 + + + + + + +
   * operation if the response does not have the {@link AuthenticatorDataFlags#UV} flag set.
+ +64 + + + + + + +
   */
+ +65 + + + + + + +
  REQUIRED("required");
+ +66 + + + + + + +
+ +67 + + + + + + +
  @JsonValue @Getter @NonNull private final String value;
+ +68 + + + + + + +
+ +69 + + + + + + +
  /**
+ +70 + + + + + + +
   * Attempt to parse a string as a {@link UserVerificationRequirement}.
+ +71 + + + + + + +
   *
+ +72 + + + + + + +
   * @param value a {@link String} equal to the {@link #getValue() value} of a constant in {@link
+ +73 + + + + + + +
   *     UserVerificationRequirement}
+ +74 + + + + + + +
   * @return The {@link UserVerificationRequirement} instance whose {@link #getValue() value} equals
+ +75 + + + + + + +
   *     <code>value</code>, if any.
+ +76 + + + + + + +
   * @see <a
+ +77 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#enumdef-userverificationrequirement">§5.10.6.
+ +78 + + + + + + +
   *     User Verification Requirement Enumeration (enum UserVerificationRequirement)</a>
+ +79 + + + + + + +
   */
+ +80 + + +1 + +1. fromValue : negated conditional → KILLED
+ +
+
+
  public static Optional<UserVerificationRequirement> fromValue(@NonNull String value) {
+ +81 + + +3 + +1. lambda$fromValue$0 : replaced boolean return with false for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromValue$0 → KILLED
+2. lambda$fromValue$0 : replaced boolean return with true for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromValue$0 → KILLED
+3. fromValue : replaced return value with Optional.empty for com/yubico/webauthn/data/UserVerificationRequirement::fromValue → KILLED
+ +
+
+
    return Stream.of(values()).filter(v -> v.value.equals(value)).findAny();
+ +82 + + + + + + +
  }
+ +83 + + + + + + +
+ +84 + + + + + + +
  @JsonCreator
+ +85 + + +1 + +1. fromJsonString : negated conditional → KILLED
+ +
+
+
  private static UserVerificationRequirement fromJsonString(@NonNull String value) {
+ +86 + + +1 + +1. fromJsonString : replaced return value with null for com/yubico/webauthn/data/UserVerificationRequirement::fromJsonString → KILLED
+ +
+
+
    return fromValue(value)
+ +87 + + + + + + +
        .orElseThrow(
+ +88 + + + + + + +
            () ->
+ +89 + + +1 + +1. lambda$fromJsonString$1 : replaced return value with null for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromJsonString$1 → KILLED
+ +
+
+
                new IllegalArgumentException(
+ +90 + + + + + + +
                    String.format(
+ +91 + + + + + + +
                        "Unknown %s value: %s",
+ +92 + + + + + + +
                        UserVerificationRequirement.class.getSimpleName(), value)));
+ +93 + + + + + + +
  }
+ +94 + + + + + + +
}

Mutations

80 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

+
81 + + + +

1.1
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with false for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromValue$0 → KILLED

2.2
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced boolean return with true for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromValue$0 → KILLED

3.3
Location : fromValue
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/data/UserVerificationRequirement::fromValue → KILLED

+
85 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

+
86 + + + +

1.1
Location : fromJsonString
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with null for com/yubico/webauthn/data/UserVerificationRequirement::fromJsonString → KILLED

+
89 + + + +

1.1
Location : lambda$fromJsonString$1
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromJsonString$1 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/index.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/index.html new file mode 100644 index 000000000..13aa7be82 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.data/index.html @@ -0,0 +1,286 @@ + + + + + + + + +

Pit Test Coverage Report

+

Package Summary

+

com.yubico.webauthn.data

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
3394%
922/982
94%
402/429
97%
402/416
+ + +

Breakdown by Class

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLine CoverageMutation CoverageTest Strength
AssertionExtensionInputs.java
100%
37/37
93%
25/27
93%
25/27
AttestationConveyancePreference.java
93%
13/14
100%
7/7
100%
7/7
AttestationObject.java
100%
43/43
100%
9/9
100%
9/9
AttestedCredentialData.java
100%
13/13
100%
4/4
100%
4/4
AuthenticatorAssertionExtensionOutputs.java
89%
16/18
100%
8/8
100%
8/8
AuthenticatorAssertionResponse.java
100%
35/35
100%
11/11
100%
11/11
AuthenticatorAttachment.java
100%
8/8
100%
6/6
100%
6/6
AuthenticatorAttestationResponse.java
96%
27/28
88%
7/8
100%
7/7
AuthenticatorData.java
93%
74/80
96%
23/24
96%
23/24
AuthenticatorDataFlags.java
93%
13/14
100%
14/14
100%
14/14
AuthenticatorRegistrationExtensionOutputs.java
89%
16/18
100%
8/8
100%
8/8
AuthenticatorResponse.java
0%
0/1
0%
0/1
100%
0/0
AuthenticatorSelectionCriteria.java
100%
24/24
100%
13/13
100%
13/13
AuthenticatorTransport.java
100%
22/22
100%
12/12
100%
12/12
ByteArray.java
100%
39/39
100%
24/24
100%
24/24
COSEAlgorithmIdentifier.java
87%
26/30
100%
10/10
100%
10/10
ClientAssertionExtensionOutputs.java
100%
20/20
89%
8/9
89%
8/9
ClientRegistrationExtensionOutputs.java
100%
18/18
100%
7/7
100%
7/7
CollectedClientData.java
79%
33/42
100%
9/9
100%
9/9
Extensions.java
79%
60/76
74%
28/38
88%
28/32
PublicKeyCredential.java
100%
41/41
100%
20/20
100%
20/20
PublicKeyCredentialCreationOptions.java
92%
100/109
94%
29/31
100%
29/29
PublicKeyCredentialDescriptor.java
97%
38/39
88%
21/24
91%
21/23
PublicKeyCredentialParameters.java
100%
22/22
100%
4/4
100%
4/4
PublicKeyCredentialRequestOptions.java
98%
42/43
95%
18/19
100%
18/18
PublicKeyCredentialType.java
91%
10/11
100%
7/7
100%
7/7
RegistrationExtensionInputs.java
100%
46/46
97%
31/32
97%
31/32
RelyingPartyIdentity.java
100%
15/15
100%
5/5
100%
5/5
ResidentKeyRequirement.java
92%
12/13
100%
7/7
100%
7/7
TokenBindingInfo.java
100%
16/16
70%
7/10
70%
7/10
TokenBindingStatus.java
75%
9/12
86%
6/7
100%
6/6
UserIdentity.java
100%
22/22
100%
7/7
100%
7/7
UserVerificationRequirement.java
92%
12/13
100%
7/7
100%
7/7
+
+ + + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.appid/AppId.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.appid/AppId.java.html new file mode 100644 index 000000000..4fa73dbbd --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.appid/AppId.java.html @@ -0,0 +1,1964 @@ + + + + + + + + + +

AppId.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.extension.appid;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.core.JsonGenerator;
+ +29 + + + + + + +
import com.fasterxml.jackson.databind.SerializerProvider;
+ +30 + + + + + + +
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+ +31 + + + + + + +
import com.google.common.net.InetAddresses;
+ +32 + + + + + + +
import java.io.IOException;
+ +33 + + + + + + +
import java.net.URI;
+ +34 + + + + + + +
import java.net.URISyntaxException;
+ +35 + + + + + + +
import lombok.NonNull;
+ +36 + + + + + + +
import lombok.Value;
+ +37 + + + + + + +
+ +38 + + + + + + +
/**
+ +39 + + + + + + +
 * A FIDO AppID verified to be syntactically valid.
+ +40 + + + + + + +
 *
+ +41 + + + + + + +
 * @see <a
+ +42 + + + + + + +
 *     href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-appid-and-facets-v2.0-id-20180227.html">FIDO
+ +43 + + + + + + +
 *     AppID and Facet Specification</a>
+ +44 + + + + + + +
 */
+ +45 + + + + + + +
@Value
+ +46 + + + + + + +
@JsonSerialize(using = AppId.JsonSerializer.class)
+ +47 + + + + + + +
public class AppId {
+ +48 + + + + + + +
+ +49 + + + + + + +
  /** The underlying string representation of this AppID. */
+ +50 + + + + + + +
  private final String id;
+ +51 + + + + + + +
+ +52 + + + + + + +
  /**
+ +53 + + + + + + +
   * Verify that the <code>appId</code> is a valid FIDO AppID, and wrap it as an {@link AppId}.
+ +54 + + + + + + +
   *
+ +55 + + + + + + +
   * @throws InvalidAppIdException if <code>appId</code> is not a valid FIDO AppID.
+ +56 + + + + + + +
   * @see <a
+ +57 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-appid-and-facets-v2.0-id-20180227.html">FIDO
+ +58 + + + + + + +
   *     AppID and Facet Specification</a>
+ +59 + + + + + + +
   */
+ +60 + + + + + + +
  @JsonCreator
+ +61 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
  public AppId(@NonNull String appId) throws InvalidAppIdException {
+ +62 + + +1 + +1. <init> : removed call to com/yubico/webauthn/extension/appid/AppId::checkIsValid → KILLED
+ +
+
+
    checkIsValid(appId);
+ +63 + + + + + + +
    this.id = appId;
+ +64 + + + + + + +
  }
+ +65 + + + + + + +
+ +66 + + + + + + +
  /**
+ +67 + + + + + + +
   * Throws {@link InvalidAppIdException} if the given App ID is found to be incompatible with the
+ +68 + + + + + + +
   * U2F specification or any major U2F Client implementation.
+ +69 + + + + + + +
   *
+ +70 + + + + + + +
   * @param appId the App ID to be validated
+ +71 + + + + + + +
   */
+ +72 + + + + + + +
  private static void checkIsValid(String appId) throws InvalidAppIdException {
+ +73 + + +1 + +1. checkIsValid : negated conditional → KILLED
+ +
+
+
    if (!appId.contains(":")) {
+ +74 + + + + + + +
      throw new InvalidAppIdException(
+ +75 + + + + + + +
          "App ID does not look like a valid facet or URL. Web facets must start with 'https://'.");
+ +76 + + + + + + +
    }
+ +77 + + +1 + +1. checkIsValid : negated conditional → KILLED
+ +
+
+
    if (appId.startsWith("http:")) {
+ +78 + + + + + + +
      throw new InvalidAppIdException(
+ +79 + + + + + + +
          "HTTP is not supported for App IDs (by Chrome). Use HTTPS instead.");
+ +80 + + + + + + +
    }
+ +81 + + +1 + +1. checkIsValid : negated conditional → KILLED
+ +
+
+
    if (appId.startsWith("https://")) {
+ +82 + + + + + + +
      URI url = checkValidUrl(appId);
+ +83 + + +1 + +1. checkIsValid : removed call to com/yubico/webauthn/extension/appid/AppId::checkPathIsNotSlash → KILLED
+ +
+
+
      checkPathIsNotSlash(url);
+ +84 + + +1 + +1. checkIsValid : removed call to com/yubico/webauthn/extension/appid/AppId::checkNotIpAddress → KILLED
+ +
+
+
      checkNotIpAddress(url);
+ +85 + + + + + + +
    }
+ +86 + + + + + + +
  }
+ +87 + + + + + + +
+ +88 + + + + + + +
  private static void checkPathIsNotSlash(URI url) throws InvalidAppIdException {
+ +89 + + +1 + +1. checkPathIsNotSlash : negated conditional → KILLED
+ +
+
+
    if ("/".equals(url.getPath())) {
+ +90 + + + + + + +
      throw new InvalidAppIdException(
+ +91 + + + + + + +
          "The path of the URL set as App ID is '/'. This is probably not what you want -- remove the trailing slash of the App ID URL.");
+ +92 + + + + + + +
    }
+ +93 + + + + + + +
  }
+ +94 + + + + + + +
+ +95 + + + + + + +
  private static URI checkValidUrl(String appId) throws InvalidAppIdException {
+ +96 + + + + + + +
    try {
+ +97 + + +1 + +1. checkValidUrl : replaced return value with null for com/yubico/webauthn/extension/appid/AppId::checkValidUrl → KILLED
+ +
+
+
      return new URI(appId);
+ +98 + + + + + + +
    } catch (URISyntaxException e) {
+ +99 + + + + + + +
      throw new InvalidAppIdException("App ID looks like a HTTPS URL, but has syntax errors.", e);
+ +100 + + + + + + +
    }
+ +101 + + + + + + +
  }
+ +102 + + + + + + +
+ +103 + + + + + + +
  private static void checkNotIpAddress(URI url) throws InvalidAppIdException {
+ +104 + + +1 + +1. checkNotIpAddress : negated conditional → KILLED
+ +
+
+
    if (InetAddresses.isInetAddress(url.getAuthority())
+ +105 + + +2 + +1. checkNotIpAddress : negated conditional → KILLED
+2. checkNotIpAddress : negated conditional → KILLED
+ +
+
+
        || (url.getHost() != null && InetAddresses.isInetAddress(url.getHost()))) {
+ +106 + + + + + + +
      throw new InvalidAppIdException(
+ +107 + + + + + + +
          "App ID must not be an IP-address, since it is not supported (by Chrome). Use a host name instead.");
+ +108 + + + + + + +
    }
+ +109 + + + + + + +
  }
+ +110 + + + + + + +
+ +111 + + + + + + +
  static class JsonSerializer extends com.fasterxml.jackson.databind.JsonSerializer<AppId> {
+ +112 + + + + + + +
    @Override
+ +113 + + + + + + +
    public void serialize(AppId value, JsonGenerator gen, SerializerProvider serializers)
+ +114 + + + + + + +
        throws IOException {
+ +115 + + +1 + +1. serialize : removed call to com/fasterxml/jackson/core/JsonGenerator::writeString → KILLED
+ +
+
+
      gen.writeString(value.getId());
+ +116 + + + + + + +
    }
+ +117 + + + + + + +
  }
+ +118 + + + + + + +
}

Mutations

61 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.disallowHttp(com.yubico.webauthn.extension.appid.AppIdTest)
negated conditional → KILLED

+
62 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.disallowHttp(com.yubico.webauthn.extension.appid.AppIdTest)
removed call to com/yubico/webauthn/extension/appid/AppId::checkIsValid → KILLED

+
73 + + + +

1.1
Location : checkIsValid
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.validUris(com.yubico.webauthn.extension.appid.AppIdTest)
negated conditional → KILLED

+
77 + + + +

1.1
Location : checkIsValid
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.disallowHttp(com.yubico.webauthn.extension.appid.AppIdTest)
negated conditional → KILLED

+
81 + + + +

1.1
Location : checkIsValid
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.validUris(com.yubico.webauthn.extension.appid.AppIdTest)
negated conditional → KILLED

+
83 + + + +

1.1
Location : checkIsValid
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.disallowSlashAsPath(com.yubico.webauthn.extension.appid.AppIdTest)
removed call to com/yubico/webauthn/extension/appid/AppId::checkPathIsNotSlash → KILLED

+
84 + + + +

1.1
Location : checkIsValid
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.disallowIP(com.yubico.webauthn.extension.appid.AppIdTest)
removed call to com/yubico/webauthn/extension/appid/AppId::checkNotIpAddress → KILLED

+
89 + + + +

1.1
Location : checkPathIsNotSlash
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)
negated conditional → KILLED

+
97 + + + +

1.1
Location : checkValidUrl
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)
replaced return value with null for com/yubico/webauthn/extension/appid/AppId::checkValidUrl → KILLED

+
104 + + + +

1.1
Location : checkNotIpAddress
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)
negated conditional → KILLED

+
105 + + + +

1.1
Location : checkNotIpAddress
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)
negated conditional → KILLED

2.2
Location : checkNotIpAddress
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)
negated conditional → KILLED

+
115 + + + +

1.1
Location : serialize
Killed by : com.yubico.webauthn.extension.appid.AppIdTest.jsonEncode(com.yubico.webauthn.extension.appid.AppIdTest)
removed call to com/fasterxml/jackson/core/JsonGenerator::writeString → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.appid/index.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.appid/index.html new file mode 100644 index 000000000..915636bc6 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.appid/index.html @@ -0,0 +1,62 @@ + + + + + + + + +

Pit Test Coverage Report

+

Package Summary

+

com.yubico.webauthn.extension.appid

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
1100%
28/28
100%
13/13
100%
13/13
+ + +

Breakdown by Class

+ + + + + + + + + + + + + + + + + + + +
NameLine CoverageMutation CoverageTest Strength
AppId.java
100%
28/28
100%
13/13
100%
13/13
+
+ + + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/KeyProtectionType.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/KeyProtectionType.java.html new file mode 100644 index 000000000..830b947c1 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/KeyProtectionType.java.html @@ -0,0 +1,2193 @@ + + + + + + + + + +

KeyProtectionType.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.webauthn.extension.uvm;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +4 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +5 + + + + + + +
import java.security.Key;
+ +6 + + + + + + +
import java.util.stream.Stream;
+ +7 + + + + + + +
import lombok.Getter;
+ +8 + + + + + + +
+ +9 + + + + + + +
/**
+ +10 + + + + + + +
 * The KEY_PROTECTION constants are flags in a bit field represented as a 16 bit long integer. They
+ +11 + + + + + + +
 * describe the method an authenticator uses to protect the private key material for FIDO
+ +12 + + + + + + +
 * registrations. Refer to [UAFAuthnrCommands] for more details on the relevance of keys and key
+ +13 + + + + + + +
 * protection. These constants are reported and queried through the UAF Discovery APIs and used to
+ +14 + + + + + + +
 * form authenticator policies in UAF protocol messages. Each constant has a case-sensitive string
+ +15 + + + + + + +
 * representation (in quotes), which is used in the authoritative metadata for FIDO authenticators.
+ +16 + + + + + + +
 *
+ +17 + + + + + + +
 * @see #fromValue(short)
+ +18 + + + + + + +
 * @see #fromName(String)
+ +19 + + + + + + +
 * @see <a
+ +20 + + + + + + +
 *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#key-protection-types">FIDO
+ +21 + + + + + + +
 *     Registry of Predefined Values §3.2 Key Protection Types</a>
+ +22 + + + + + + +
 */
+ +23 + + + + + + +
@Getter
+ +24 + + + + + + +
public enum KeyProtectionType {
+ +25 + + + + + + +
+ +26 + + + + + + +
  /**
+ +27 + + + + + + +
   * This flag MUST be set if the authenticator uses software-based key management. Exclusive in
+ +28 + + + + + + +
   * authenticator metadata with {@link #KEY_PROTECTION_HARDWARE}, {@link #KEY_PROTECTION_TEE},
+ +29 + + + + + + +
   * {@link #KEY_PROTECTION_SECURE_ELEMENT}.
+ +30 + + + + + + +
   *
+ +31 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +32 + + + + + + +
   *
+ +33 + + + + + + +
   * @see <a
+ +34 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#key-protection-types">FIDO
+ +35 + + + + + + +
   *     Registry of Predefined Values §3.2 Key Protection Types</a>
+ +36 + + + + + + +
   */
+ +37 + + + + + + +
  KEY_PROTECTION_SOFTWARE((short) 0x0001, "software"),
+ +38 + + + + + + +
+ +39 + + + + + + +
  /**
+ +40 + + + + + + +
   * This flag SHOULD be set if the authenticator uses hardware-based key management. Exclusive in
+ +41 + + + + + + +
   * authenticator metadata with {@link #KEY_PROTECTION_SOFTWARE}.
+ +42 + + + + + + +
   *
+ +43 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +44 + + + + + + +
   *
+ +45 + + + + + + +
   * @see <a
+ +46 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#key-protection-types">FIDO
+ +47 + + + + + + +
   *     Registry of Predefined Values §3.2 Key Protection Types</a>
+ +48 + + + + + + +
   */
+ +49 + + + + + + +
  KEY_PROTECTION_HARDWARE((short) 0x0002, "hardware"),
+ +50 + + + + + + +
+ +51 + + + + + + +
  /**
+ +52 + + + + + + +
   * This flag SHOULD be set if the authenticator uses the Trusted Execution Environment [TEE] for
+ +53 + + + + + + +
   * key management. In authenticator metadata, this flag should be set in conjunction with {@link
+ +54 + + + + + + +
   * #KEY_PROTECTION_HARDWARE}. Mutually exclusive in authenticator metadata with {@link
+ +55 + + + + + + +
   * #KEY_PROTECTION_SOFTWARE}, {@link #KEY_PROTECTION_SECURE_ELEMENT}.
+ +56 + + + + + + +
   *
+ +57 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +58 + + + + + + +
   *
+ +59 + + + + + + +
   * @see <a
+ +60 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#key-protection-types">FIDO
+ +61 + + + + + + +
   *     Registry of Predefined Values §3.2 Key Protection Types</a>
+ +62 + + + + + + +
   */
+ +63 + + + + + + +
  KEY_PROTECTION_TEE((short) 0x0004, "tee"),
+ +64 + + + + + + +
+ +65 + + + + + + +
  /**
+ +66 + + + + + + +
   * This flag SHOULD be set if the authenticator uses a Secure Element [SecureElement] for key
+ +67 + + + + + + +
   * management. In authenticator metadata, this flag should be set in conjunction with {@link
+ +68 + + + + + + +
   * #KEY_PROTECTION_HARDWARE}. Mutually exclusive in authenticator metadata with {@link
+ +69 + + + + + + +
   * #KEY_PROTECTION_TEE}, {@link #KEY_PROTECTION_SOFTWARE}.
+ +70 + + + + + + +
   *
+ +71 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +72 + + + + + + +
   *
+ +73 + + + + + + +
   * @see <a
+ +74 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#key-protection-types">FIDO
+ +75 + + + + + + +
   *     Registry of Predefined Values §3.2 Key Protection Types</a>
+ +76 + + + + + + +
   */
+ +77 + + + + + + +
  KEY_PROTECTION_SECURE_ELEMENT((short) 0x0008, "secure_element"),
+ +78 + + + + + + +
+ +79 + + + + + + +
  /**
+ +80 + + + + + + +
   * This flag MUST be set if the authenticator does not store (wrapped) UAuth keys at the client,
+ +81 + + + + + + +
   * but relies on a server-provided key handle. This flag MUST be set in conjunction with one of
+ +82 + + + + + + +
   * the other KEY_PROTECTION flags to indicate how the local key handle wrapping key and operations
+ +83 + + + + + + +
   * are protected. Servers MAY unset this flag in authenticator policy if they are not prepared to
+ +84 + + + + + + +
   * store and return key handles, for example, if they have a requirement to respond
+ +85 + + + + + + +
   * indistinguishably to authentication attempts against userIDs that do and do not exist. Refer to
+ +86 + + + + + + +
   * [<a
+ +87 + + + + + + +
   * href="https://fidoalliance.org/specs/fido-uaf-v1.2-rd-20171128/fido-uaf-protocol-v1.2-rd-20171128.html">UAFProtocol</a>]
+ +88 + + + + + + +
   * for more details.
+ +89 + + + + + + +
   *
+ +90 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +91 + + + + + + +
   *
+ +92 + + + + + + +
   * @see <a
+ +93 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#key-protection-types">FIDO
+ +94 + + + + + + +
   *     Registry of Predefined Values §3.2 Key Protection Types</a>
+ +95 + + + + + + +
   * @see <a
+ +96 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-uaf-v1.2-rd-20171128/fido-uaf-protocol-v1.2-rd-20171128.html">FIDO
+ +97 + + + + + + +
   *     UAF Protocol Specification [UAFProtocol]</a>
+ +98 + + + + + + +
   */
+ +99 + + + + + + +
  KEY_PROTECTION_REMOTE_HANDLE((short) 0x0010, "remote_handle");
+ +100 + + + + + + +
+ +101 + + + + + + +
  private final short value;
+ +102 + + + + + + +
+ +103 + + + + + + +
  @JsonValue private final String name;
+ +104 + + + + + + +
+ +105 + + + + + + +
  KeyProtectionType(short value, String name) {
+ +106 + + + + + + +
    this.value = value;
+ +107 + + + + + + +
    this.name = name;
+ +108 + + + + + + +
  }
+ +109 + + + + + + +
+ +110 + + + + + + +
  /**
+ +111 + + + + + + +
   * @return If <code>value</code> matches any {@link KeyProtectionType} constant, returns that
+ +112 + + + + + + +
   *     constant instance. Otherwise throws {@link IllegalArgumentException}.
+ +113 + + + + + + +
   */
+ +114 + + + + + + +
  public static KeyProtectionType fromValue(short value) {
+ +115 + + +1 + +1. fromValue : replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::fromValue → KILLED
+ +
+
+
    return Stream.of(values())
+ +116 + + +2 + +1. lambda$fromValue$0 : negated conditional → KILLED
+2. lambda$fromValue$0 : replaced boolean return with true for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromValue$0 → KILLED
+ +
+
+
        .filter(v -> v.value == value)
+ +117 + + + + + + +
        .findAny()
+ +118 + + + + + + +
        .orElseThrow(
+ +119 + + + + + + +
            () ->
+ +120 + + +1 + +1. lambda$fromValue$1 : replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromValue$1 → KILLED
+ +
+
+
                new IllegalArgumentException(
+ +121 + + + + + + +
                    String.format("Unknown %s value: 0x%04x", KeyProtectionType.class, value)));
+ +122 + + + + + + +
  }
+ +123 + + + + + + +
+ +124 + + + + + + +
  /**
+ +125 + + + + + + +
   * @return If <code>name</code> matches any {@link Key} constant, returns that constant instance.
+ +126 + + + + + + +
   *     Otherwise throws {@link IllegalArgumentException}.
+ +127 + + + + + + +
   */
+ +128 + + + + + + +
  @JsonCreator
+ +129 + + + + + + +
  public static KeyProtectionType fromName(String name) {
+ +130 + + +1 + +1. fromName : replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::fromName → NO_COVERAGE
+ +
+
+
    return Stream.of(values())
+ +131 + + +2 + +1. lambda$fromName$2 : replaced boolean return with false for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$2 → NO_COVERAGE
+2. lambda$fromName$2 : replaced boolean return with true for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$2 → NO_COVERAGE
+ +
+
+
        .filter(v -> v.name.equals(name))
+ +132 + + + + + + +
        .findAny()
+ +133 + + + + + + +
        .orElseThrow(
+ +134 + + + + + + +
            () ->
+ +135 + + +1 + +1. lambda$fromName$3 : replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$3 → NO_COVERAGE
+ +
+
+
                new IllegalArgumentException(
+ +136 + + + + + + +
                    String.format("Unknown %s name: %s", KeyProtectionType.class, name)));
+ +137 + + + + + + +
  }
+ +138 + + + + + + +
}

Mutations

115 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::fromValue → KILLED

+
116 + + + +

1.1
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

2.2
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced boolean return with true for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromValue$0 → KILLED

+
120 + + + +

1.1
Location : lambda$fromValue$1
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromValue$1 → KILLED

+
130 + + + +

1.1
Location : fromName
Killed by : none
replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::fromName → NO_COVERAGE

+
131 + + + +

1.1
Location : lambda$fromName$2
Killed by : none
replaced boolean return with false for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$2 → NO_COVERAGE

2.2
Location : lambda$fromName$2
Killed by : none
replaced boolean return with true for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$2 → NO_COVERAGE

+
135 + + + +

1.1
Location : lambda$fromName$3
Killed by : none
replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$3 → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/MatcherProtectionType.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/MatcherProtectionType.java.html new file mode 100644 index 000000000..5cf6e1dbd --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/MatcherProtectionType.java.html @@ -0,0 +1,1638 @@ + + + + + + + + + +

MatcherProtectionType.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.webauthn.extension.uvm;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +4 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +5 + + + + + + +
import java.util.stream.Stream;
+ +6 + + + + + + +
import lombok.Getter;
+ +7 + + + + + + +
+ +8 + + + + + + +
/**
+ +9 + + + + + + +
 * The MATCHER_PROTECTION constants are flags in a bit field represented as a 16 bit long integer.
+ +10 + + + + + + +
 * They describe the method an authenticator uses to protect the matcher that performs user
+ +11 + + + + + + +
 * verification. These constants are reported and queried through the UAF Discovery APIs and used to
+ +12 + + + + + + +
 * form authenticator policies in UAF protocol messages. Refer to [UAFAuthnrCommands] for more
+ +13 + + + + + + +
 * details on the matcher component. Each constant has a case-sensitive string representation (in
+ +14 + + + + + + +
 * quotes), which is used in the authoritative metadata for FIDO authenticators.
+ +15 + + + + + + +
 *
+ +16 + + + + + + +
 * @see #fromValue(int)
+ +17 + + + + + + +
 * @see #fromName(String)
+ +18 + + + + + + +
 * @see <a
+ +19 + + + + + + +
 *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#matcher-protection-types">FIDO
+ +20 + + + + + + +
 *     Registry of Predefined Values §3.3 Matcher Protection Types</a>
+ +21 + + + + + + +
 */
+ +22 + + + + + + +
@Getter
+ +23 + + + + + + +
public enum MatcherProtectionType {
+ +24 + + + + + + +
+ +25 + + + + + + +
  /**
+ +26 + + + + + + +
   * This flag MUST be set if the authenticator's matcher is running in software. Exclusive in
+ +27 + + + + + + +
   * authenticator metadata with {@link #MATCHER_PROTECTION_TEE}, {@link
+ +28 + + + + + + +
   * #MATCHER_PROTECTION_ON_CHIP}.
+ +29 + + + + + + +
   *
+ +30 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +31 + + + + + + +
   *
+ +32 + + + + + + +
   * @see <a
+ +33 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#matcher-protection-types">FIDO
+ +34 + + + + + + +
   *     Registry of Predefined Values §3.3 Matcher Protection Types</a>
+ +35 + + + + + + +
   */
+ +36 + + + + + + +
  MATCHER_PROTECTION_SOFTWARE((short) 0x0001, "software"),
+ +37 + + + + + + +
+ +38 + + + + + + +
  /**
+ +39 + + + + + + +
   * This flag SHOULD be set if the authenticator's matcher is running inside the Trusted Execution
+ +40 + + + + + + +
   * Environment [TEE]. Mutually exclusive in authenticator metadata with {@link
+ +41 + + + + + + +
   * #MATCHER_PROTECTION_SOFTWARE}, {@link #MATCHER_PROTECTION_ON_CHIP}.
+ +42 + + + + + + +
   *
+ +43 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +44 + + + + + + +
   *
+ +45 + + + + + + +
   * @see <a
+ +46 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#matcher-protection-types">FIDO
+ +47 + + + + + + +
   *     Registry of Predefined Values §3.3 Matcher Protection Types</a>
+ +48 + + + + + + +
   */
+ +49 + + + + + + +
  MATCHER_PROTECTION_TEE((short) 0x0002, "tee"),
+ +50 + + + + + + +
+ +51 + + + + + + +
  /**
+ +52 + + + + + + +
   * This flag SHOULD be set if the authenticator's matcher is running on the chip. Mutually
+ +53 + + + + + + +
   * exclusive in authenticator metadata with {@link #MATCHER_PROTECTION_TEE}, {@link
+ +54 + + + + + + +
   * #MATCHER_PROTECTION_SOFTWARE}
+ +55 + + + + + + +
   *
+ +56 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +57 + + + + + + +
   *
+ +58 + + + + + + +
   * @see <a
+ +59 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#matcher-protection-types">FIDO
+ +60 + + + + + + +
   *     Registry of Predefined Values §3.3 Matcher Protection Types</a>
+ +61 + + + + + + +
   */
+ +62 + + + + + + +
  MATCHER_PROTECTION_ON_CHIP((short) 0x0004, "on_chip");
+ +63 + + + + + + +
+ +64 + + + + + + +
  private final short value;
+ +65 + + + + + + +
+ +66 + + + + + + +
  @JsonValue private final String name;
+ +67 + + + + + + +
+ +68 + + + + + + +
  MatcherProtectionType(short value, String name) {
+ +69 + + + + + + +
    this.value = value;
+ +70 + + + + + + +
    this.name = name;
+ +71 + + + + + + +
  }
+ +72 + + + + + + +
+ +73 + + + + + + +
  /**
+ +74 + + + + + + +
   * @return If <code>value</code> matches any {@link MatcherProtectionType} constant, returns that
+ +75 + + + + + + +
   *     constant instance. Otherwise throws {@link IllegalArgumentException}.
+ +76 + + + + + + +
   */
+ +77 + + + + + + +
  public static MatcherProtectionType fromValue(int value) {
+ +78 + + +1 + +1. fromValue : replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::fromValue → KILLED
+ +
+
+
    return Stream.of(values())
+ +79 + + +2 + +1. lambda$fromValue$0 : negated conditional → KILLED
+2. lambda$fromValue$0 : replaced boolean return with true for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromValue$0 → KILLED
+ +
+
+
        .filter(v -> v.value == value)
+ +80 + + + + + + +
        .findAny()
+ +81 + + + + + + +
        .orElseThrow(
+ +82 + + + + + + +
            () ->
+ +83 + + +1 + +1. lambda$fromValue$1 : replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromValue$1 → KILLED
+ +
+
+
                new IllegalArgumentException(
+ +84 + + + + + + +
                    String.format("Unknown %s value: 0x%04x", MatcherProtectionType.class, value)));
+ +85 + + + + + + +
  }
+ +86 + + + + + + +
+ +87 + + + + + + +
  /**
+ +88 + + + + + + +
   * @return If <code>name</code> matches any {@link MatcherProtectionType} constant, returns that
+ +89 + + + + + + +
   *     constant instance. Otherwise throws {@link IllegalArgumentException}.
+ +90 + + + + + + +
   */
+ +91 + + + + + + +
  @JsonCreator
+ +92 + + + + + + +
  public static MatcherProtectionType fromName(String name) {
+ +93 + + +1 + +1. fromName : replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::fromName → NO_COVERAGE
+ +
+
+
    return Stream.of(values())
+ +94 + + +2 + +1. lambda$fromName$2 : replaced boolean return with true for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$2 → NO_COVERAGE
+2. lambda$fromName$2 : replaced boolean return with false for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$2 → NO_COVERAGE
+ +
+
+
        .filter(v -> v.name.equals(name))
+ +95 + + + + + + +
        .findAny()
+ +96 + + + + + + +
        .orElseThrow(
+ +97 + + + + + + +
            () ->
+ +98 + + +1 + +1. lambda$fromName$3 : replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$3 → NO_COVERAGE
+ +
+
+
                new IllegalArgumentException(
+ +99 + + + + + + +
                    String.format("Unknown %s name: %s", MatcherProtectionType.class, name)));
+ +100 + + + + + + +
  }
+ +101 + + + + + + +
}

Mutations

78 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::fromValue → KILLED

+
79 + + + +

1.1
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

2.2
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced boolean return with true for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromValue$0 → KILLED

+
83 + + + +

1.1
Location : lambda$fromValue$1
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromValue$1 → KILLED

+
93 + + + +

1.1
Location : fromName
Killed by : none
replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::fromName → NO_COVERAGE

+
94 + + + +

1.1
Location : lambda$fromName$2
Killed by : none
replaced boolean return with true for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$2 → NO_COVERAGE

2.2
Location : lambda$fromName$2
Killed by : none
replaced boolean return with false for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$2 → NO_COVERAGE

+
98 + + + +

1.1
Location : lambda$fromName$3
Killed by : none
replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$3 → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/UserVerificationMethod.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/UserVerificationMethod.java.html new file mode 100644 index 000000000..53431b24d --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/UserVerificationMethod.java.html @@ -0,0 +1,3513 @@ + + + + + + + + + +

UserVerificationMethod.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.webauthn.extension.uvm;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +4 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +5 + + + + + + +
import java.util.stream.Stream;
+ +6 + + + + + + +
import lombok.Getter;
+ +7 + + + + + + +
+ +8 + + + + + + +
/**
+ +9 + + + + + + +
 * The USER_VERIFY constants are flags in a bitfield represented as a 32 bit long integer. They
+ +10 + + + + + + +
 * describe the methods and capabilities of a FIDO authenticator for locally verifying a user. The
+ +11 + + + + + + +
 * operational details of these methods are opaque to the server. These constants are used in the
+ +12 + + + + + + +
 * authoritative metadata for FIDO authenticators, reported and queried through the UAF Discovery
+ +13 + + + + + + +
 * APIs, and used to form authenticator policies in UAF protocol messages. Each constant has a
+ +14 + + + + + + +
 * case-sensitive string representation (in quotes), which is used in the authoritative metadata for
+ +15 + + + + + + +
 * FIDO authenticators.
+ +16 + + + + + + +
 *
+ +17 + + + + + + +
 * @see #fromValue(int)
+ +18 + + + + + + +
 * @see #fromName(String)
+ +19 + + + + + + +
 * @see <a
+ +20 + + + + + + +
 *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +21 + + + + + + +
 *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +22 + + + + + + +
 */
+ +23 + + + + + + +
@Getter
+ +24 + + + + + + +
public enum UserVerificationMethod {
+ +25 + + + + + + +
+ +26 + + + + + + +
  /**
+ +27 + + + + + + +
   * This flag MUST be set if the authenticator is able to confirm user presence in any fashion. If
+ +28 + + + + + + +
   * this flag and no other is set for user verification, the guarantee is only that the
+ +29 + + + + + + +
   * authenticator cannot be operated without some human intervention, not necessarily that the
+ +30 + + + + + + +
   * sensing of "presence" provides any level of user verification (e.g. a device that requires a
+ +31 + + + + + + +
   * button press to activate).
+ +32 + + + + + + +
   *
+ +33 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +34 + + + + + + +
   *
+ +35 + + + + + + +
   * @see <a
+ +36 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +37 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +38 + + + + + + +
   */
+ +39 + + + + + + +
  USER_VERIFY_PRESENCE_INTERNAL(0x00000001, "presence_internal"),
+ +40 + + + + + + +
+ +41 + + + + + + +
  /**
+ +42 + + + + + + +
   * This flag MUST be set if the authenticator uses any type of measurement of a fingerprint for
+ +43 + + + + + + +
   * user verification.
+ +44 + + + + + + +
   *
+ +45 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +46 + + + + + + +
   *
+ +47 + + + + + + +
   * @see <a
+ +48 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +49 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +50 + + + + + + +
   */
+ +51 + + + + + + +
  USER_VERIFY_FINGERPRINT_INTERNAL(0x00000002, "fingerprint_internal"),
+ +52 + + + + + + +
+ +53 + + + + + + +
  /**
+ +54 + + + + + + +
   * This flag MUST be set if the authenticator uses a local-only passcode (i.e. a passcode not
+ +55 + + + + + + +
   * known by the server) for user verification.
+ +56 + + + + + + +
   *
+ +57 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +58 + + + + + + +
   *
+ +59 + + + + + + +
   * @see <a
+ +60 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +61 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +62 + + + + + + +
   */
+ +63 + + + + + + +
  USER_VERIFY_PASSCODE_INTERNAL(0x00000004, "passcode_internal"),
+ +64 + + + + + + +
+ +65 + + + + + + +
  /**
+ +66 + + + + + + +
   * This flag MUST be set if the authenticator uses a voiceprint (also known as speaker
+ +67 + + + + + + +
   * recognition) for user verification.
+ +68 + + + + + + +
   *
+ +69 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +70 + + + + + + +
   *
+ +71 + + + + + + +
   * @see <a
+ +72 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +73 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +74 + + + + + + +
   */
+ +75 + + + + + + +
  USER_VERIFY_VOICEPRINT_INTERNAL(0x00000008, "voiceprint_internal"),
+ +76 + + + + + + +
+ +77 + + + + + + +
  /**
+ +78 + + + + + + +
   * This flag MUST be set if the authenticator uses any manner of face recognition to verify the
+ +79 + + + + + + +
   * user.
+ +80 + + + + + + +
   *
+ +81 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +82 + + + + + + +
   *
+ +83 + + + + + + +
   * @see <a
+ +84 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +85 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +86 + + + + + + +
   */
+ +87 + + + + + + +
  USER_VERIFY_FACEPRINT_INTERNAL(0x00000010, "faceprint_internal"),
+ +88 + + + + + + +
+ +89 + + + + + + +
  /**
+ +90 + + + + + + +
   * This flag MUST be set if the authenticator uses any form of location sensor or measurement for
+ +91 + + + + + + +
   * user verification.
+ +92 + + + + + + +
   *
+ +93 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +94 + + + + + + +
   *
+ +95 + + + + + + +
   * @see <a
+ +96 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +97 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +98 + + + + + + +
   */
+ +99 + + + + + + +
  USER_VERIFY_LOCATION_INTERNAL(0x00000020, "location_internal"),
+ +100 + + + + + + +
+ +101 + + + + + + +
  /**
+ +102 + + + + + + +
   * This flag MUST be set if the authenticator uses any form of eye biometrics for user
+ +103 + + + + + + +
   * verification.
+ +104 + + + + + + +
   *
+ +105 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +106 + + + + + + +
   *
+ +107 + + + + + + +
   * @see <a
+ +108 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +109 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +110 + + + + + + +
   */
+ +111 + + + + + + +
  USER_VERIFY_EYEPRINT_INTERNAL(0x00000040, "eyeprint_internal"),
+ +112 + + + + + + +
+ +113 + + + + + + +
  /**
+ +114 + + + + + + +
   * This flag MUST be set if the authenticator uses a drawn pattern for user verification.
+ +115 + + + + + + +
   *
+ +116 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +117 + + + + + + +
   *
+ +118 + + + + + + +
   * @see <a
+ +119 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +120 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +121 + + + + + + +
   */
+ +122 + + + + + + +
  USER_VERIFY_PATTERN_INTERNAL(0x00000080, "pattern_internal"),
+ +123 + + + + + + +
+ +124 + + + + + + +
  /**
+ +125 + + + + + + +
   * This flag MUST be set if the authenticator uses any measurement of a full hand (including
+ +126 + + + + + + +
   * palm-print, hand geometry or vein geometry) for user verification.
+ +127 + + + + + + +
   *
+ +128 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +129 + + + + + + +
   *
+ +130 + + + + + + +
   * @see <a
+ +131 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +132 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +133 + + + + + + +
   */
+ +134 + + + + + + +
  USER_VERIFY_HANDPRINT_INTERNAL(0x00000100, "handprint_internal"),
+ +135 + + + + + + +
+ +136 + + + + + + +
  /**
+ +137 + + + + + + +
   * This flag MUST be set if the authenticator uses a local-only passcode (i.e. a passcode not
+ +138 + + + + + + +
   * known by the server) for user verification that might be gathered outside the authenticator
+ +139 + + + + + + +
   * boundary.
+ +140 + + + + + + +
   *
+ +141 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +142 + + + + + + +
   *
+ +143 + + + + + + +
   * @see <a
+ +144 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +145 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +146 + + + + + + +
   */
+ +147 + + + + + + +
  USER_VERIFY_PASSCODE_EXTERNAL(0x00000800, "passcode_external"),
+ +148 + + + + + + +
+ +149 + + + + + + +
  /**
+ +150 + + + + + + +
   * This flag MUST be set if the authenticator uses a drawn pattern for user verification that
+ +151 + + + + + + +
   * might be gathered outside the authenticator boundary.
+ +152 + + + + + + +
   *
+ +153 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +154 + + + + + + +
   *
+ +155 + + + + + + +
   * @see <a
+ +156 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +157 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +158 + + + + + + +
   */
+ +159 + + + + + + +
  USER_VERIFY_PATTERN_EXTERNAL(0x00001000, "pattern_external"),
+ +160 + + + + + + +
+ +161 + + + + + + +
  /**
+ +162 + + + + + + +
   * This flag MUST be set if the authenticator will respond without any user interaction (e.g.
+ +163 + + + + + + +
   * Silent Authenticator).
+ +164 + + + + + + +
   *
+ +165 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +166 + + + + + + +
   *
+ +167 + + + + + + +
   * @see <a
+ +168 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +169 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +170 + + + + + + +
   */
+ +171 + + + + + + +
  USER_VERIFY_NONE(0x00000200, "none"),
+ +172 + + + + + + +
+ +173 + + + + + + +
  /**
+ +174 + + + + + + +
   * If an authenticator sets multiple flags for the "_INTERNAL" and/or "_EXTERNAL" user
+ +175 + + + + + + +
   * verification types, it MAY also set this flag to indicate that all verification methods with
+ +176 + + + + + + +
   * respective flags set will be enforced (e.g. faceprint AND voiceprint). If flags for multiple
+ +177 + + + + + + +
   * user verification methods are set and this flag is not set, verification with only one is
+ +178 + + + + + + +
   * necessary (e.g. fingerprint OR passcode).
+ +179 + + + + + + +
   *
+ +180 + + + + + + +
   * <p>NOTE: The above requirements apply to authenticators; this library DOES NOT enforce them.
+ +181 + + + + + + +
   *
+ +182 + + + + + + +
   * @see <a
+ +183 + + + + + + +
   *     href="https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods">FIDO
+ +184 + + + + + + +
   *     Registry of Predefined Values §3.1 User Verification Methods</a>
+ +185 + + + + + + +
   */
+ +186 + + + + + + +
  USER_VERIFY_ALL(0x00000400, "all");
+ +187 + + + + + + +
+ +188 + + + + + + +
  private final int value;
+ +189 + + + + + + +
+ +190 + + + + + + +
  @JsonValue private final String name;
+ +191 + + + + + + +
+ +192 + + + + + + +
  UserVerificationMethod(int value, String name) {
+ +193 + + + + + + +
    this.value = value;
+ +194 + + + + + + +
    this.name = name;
+ +195 + + + + + + +
  }
+ +196 + + + + + + +
+ +197 + + + + + + +
  /**
+ +198 + + + + + + +
   * @return If <code>value</code> matches any {@link UserVerificationMethod} constant, returns that
+ +199 + + + + + + +
   *     constant instance. Otherwise throws {@link IllegalArgumentException}.
+ +200 + + + + + + +
   */
+ +201 + + + + + + +
  public static UserVerificationMethod fromValue(int value) {
+ +202 + + +1 + +1. fromValue : replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::fromValue → KILLED
+ +
+
+
    return Stream.of(values())
+ +203 + + +2 + +1. lambda$fromValue$0 : negated conditional → KILLED
+2. lambda$fromValue$0 : replaced boolean return with true for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromValue$0 → KILLED
+ +
+
+
        .filter(v -> v.value == value)
+ +204 + + + + + + +
        .findAny()
+ +205 + + + + + + +
        .orElseThrow(
+ +206 + + + + + + +
            () ->
+ +207 + + +1 + +1. lambda$fromValue$1 : replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromValue$1 → KILLED
+ +
+
+
                new IllegalArgumentException(
+ +208 + + + + + + +
                    String.format(
+ +209 + + + + + + +
                        "Unknown %s value: 0x%04x", UserVerificationMethod.class, value)));
+ +210 + + + + + + +
  }
+ +211 + + + + + + +
+ +212 + + + + + + +
  /**
+ +213 + + + + + + +
   * @return If <code>name</code> matches any {@link UserVerificationMethod} constant, returns that
+ +214 + + + + + + +
   *     constant instance. Otherwise throws {@link IllegalArgumentException}.
+ +215 + + + + + + +
   */
+ +216 + + + + + + +
  @JsonCreator
+ +217 + + + + + + +
  public static UserVerificationMethod fromName(String name) {
+ +218 + + +1 + +1. fromName : replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::fromName → NO_COVERAGE
+ +
+
+
    return Stream.of(values())
+ +219 + + +2 + +1. lambda$fromName$2 : replaced boolean return with true for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$2 → NO_COVERAGE
+2. lambda$fromName$2 : replaced boolean return with false for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$2 → NO_COVERAGE
+ +
+
+
        .filter(v -> v.name.equals(name))
+ +220 + + + + + + +
        .findAny()
+ +221 + + + + + + +
        .orElseThrow(
+ +222 + + + + + + +
            () ->
+ +223 + + +1 + +1. lambda$fromName$3 : replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$3 → NO_COVERAGE
+ +
+
+
                new IllegalArgumentException(
+ +224 + + + + + + +
                    String.format("Unknown %s name: %s", UserVerificationMethod.class, name)));
+ +225 + + + + + + +
  }
+ +226 + + + + + + +
}

Mutations

202 + + + +

1.1
Location : fromValue
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::fromValue → KILLED

+
203 + + + +

1.1
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.EnumsSpec
negated conditional → KILLED

2.2
Location : lambda$fromValue$0
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced boolean return with true for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromValue$0 → KILLED

+
207 + + + +

1.1
Location : lambda$fromValue$1
Killed by : com.yubico.webauthn.data.EnumsSpec
replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromValue$1 → KILLED

+
218 + + + +

1.1
Location : fromName
Killed by : none
replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::fromName → NO_COVERAGE

+
219 + + + +

1.1
Location : lambda$fromName$2
Killed by : none
replaced boolean return with true for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$2 → NO_COVERAGE

2.2
Location : lambda$fromName$2
Killed by : none
replaced boolean return with false for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$2 → NO_COVERAGE

+
223 + + + +

1.1
Location : lambda$fromName$3
Killed by : none
replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$3 → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/index.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/index.html new file mode 100644 index 000000000..bf77f0815 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.extension.uvm/index.html @@ -0,0 +1,76 @@ + + + + + + + + +

Pit Test Coverage Report

+

Package Summary

+

com.yubico.webauthn.extension.uvm

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
373%
58/79
50%
12/24
100%
12/12
+ + +

Breakdown by Class

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLine CoverageMutation CoverageTest Strength
KeyProtectionType.java
71%
17/24
50%
4/8
100%
4/4
MatcherProtectionType.java
68%
15/22
50%
4/8
100%
4/4
UserVerificationMethod.java
79%
26/33
50%
4/8
100%
4/4
+
+ + + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/DocumentStatus.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/DocumentStatus.java.html new file mode 100644 index 000000000..d5b3cd2e5 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/DocumentStatus.java.html @@ -0,0 +1,914 @@ + + + + + + + + + +

DocumentStatus.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.meta;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonValue;
+ +28 + + + + + + +
import java.util.Optional;
+ +29 + + + + + + +
import java.util.stream.Stream;
+ +30 + + + + + + +
import lombok.AllArgsConstructor;
+ +31 + + + + + + +
import lombok.NonNull;
+ +32 + + + + + + +
+ +33 + + + + + + +
/** A representation of Web Authentication specification document statuses. */
+ +34 + + + + + + +
@AllArgsConstructor
+ +35 + + + + + + +
public enum DocumentStatus {
+ +36 + + + + + + +
  /** An editor's draft is a changing work in progress. */
+ +37 + + + + + + +
  EDITORS_DRAFT("editors-draft"),
+ +38 + + + + + + +
+ +39 + + + + + + +
  /** A working draft is a named snapshot of a particular state of an editor's draft. */
+ +40 + + + + + + +
  WORKING_DRAFT("working-draft"),
+ +41 + + + + + + +
+ +42 + + + + + + +
  /** A candidate recommendation is a specification release candidate. */
+ +43 + + + + + + +
  CANDIDATE_RECOMMENDATION("candidate-recommendation"),
+ +44 + + + + + + +
+ +45 + + + + + + +
  /** A proposed recommendation is a finished draft intended for release. */
+ +46 + + + + + + +
  PROPOSED_RECOMMENDATION("proposed-recommendation"),
+ +47 + + + + + + +
+ +48 + + + + + + +
  /** A recommendation is a finished and released specification. */
+ +49 + + + + + + +
  RECOMMENDATION("recommendation");
+ +50 + + + + + + +
+ +51 + + + + + + +
  @JsonValue private final String id;
+ +52 + + + + + + +
+ +53 + + +1 + +1. fromString : negated conditional → NO_COVERAGE
+ +
+
+
  static Optional<DocumentStatus> fromString(@NonNull String id) {
+ +54 + + +3 + +1. lambda$fromString$0 : replaced boolean return with false for com/yubico/webauthn/meta/DocumentStatus::lambda$fromString$0 → NO_COVERAGE
+2. fromString : replaced return value with Optional.empty for com/yubico/webauthn/meta/DocumentStatus::fromString → NO_COVERAGE
+3. lambda$fromString$0 : replaced boolean return with true for com/yubico/webauthn/meta/DocumentStatus::lambda$fromString$0 → NO_COVERAGE
+ +
+
+
    return Stream.of(values()).filter(v -> v.id.equals(id)).findAny();
+ +55 + + + + + + +
  }
+ +56 + + + + + + +
}

Mutations

53 + + + +

1.1
Location : fromString
Killed by : none
negated conditional → NO_COVERAGE

+
54 + + + +

1.1
Location : lambda$fromString$0
Killed by : none
replaced boolean return with false for com/yubico/webauthn/meta/DocumentStatus::lambda$fromString$0 → NO_COVERAGE

2.2
Location : fromString
Killed by : none
replaced return value with Optional.empty for com/yubico/webauthn/meta/DocumentStatus::fromString → NO_COVERAGE

3.3
Location : lambda$fromString$0
Killed by : none
replaced boolean return with true for com/yubico/webauthn/meta/DocumentStatus::lambda$fromString$0 → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/Specification.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/Specification.java.html new file mode 100644 index 000000000..83b330136 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/Specification.java.html @@ -0,0 +1,915 @@ + + + + + + + + + +

Specification.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.meta;
+ +26 + + + + + + +
+ +27 + + + + + + +
import java.net.URL;
+ +28 + + + + + + +
import java.time.LocalDate;
+ +29 + + + + + + +
import lombok.AccessLevel;
+ +30 + + + + + + +
import lombok.AllArgsConstructor;
+ +31 + + + + + + +
import lombok.Builder;
+ +32 + + + + + + +
import lombok.Value;
+ +33 + + + + + + +
+ +34 + + + + + + +
/** Reference to a particular version of a specification document. */
+ +35 + + + + + + +
@Value
+ +36 + + + + + + +
@AllArgsConstructor(access = AccessLevel.PRIVATE)
+ +37 + + + + + + +
@Builder
+ +38 + + + + + + +
public class Specification {
+ +39 + + + + + + +
+ +40 + + + + + + +
  /** Address to this version of the specification. */
+ +41 + + + + + + +
  private final URL url;
+ +42 + + + + + + +
+ +43 + + + + + + +
  /** Address to the latest version of this specification. */
+ +44 + + + + + + +
  private final URL latestVersionUrl;
+ +45 + + + + + + +
+ +46 + + + + + + +
  /** An object indicating the status of the specification document. */
+ +47 + + + + + + +
  private final DocumentStatus status;
+ +48 + + + + + + +
+ +49 + + + + + + +
  /** The release date of the specification document. */
+ +50 + + + + + + +
  private final LocalDate releaseDate;
+ +51 + + + + + + +
+ +52 + + + + + + +
  static SpecificationBuilder builder() {
+ +53 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/meta/Specification::builder → NO_COVERAGE
+ +
+
+
    return new SpecificationBuilder();
+ +54 + + + + + + +
  }
+ +55 + + + + + + +
+ +56 + + + + + + +
  static class SpecificationBuilder {}
+ +57 + + + + + + +
}

Mutations

53 + + + +

1.1
Location : builder
Killed by : none
replaced return value with null for com/yubico/webauthn/meta/Specification::builder → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/VersionInfo.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/VersionInfo.java.html new file mode 100644 index 000000000..2465ddddb --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/VersionInfo.java.html @@ -0,0 +1,1488 @@ + + + + + + + + + +

VersionInfo.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn.meta;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.internal.util.ExceptionUtil;
+ +28 + + + + + + +
import java.io.IOException;
+ +29 + + + + + + +
import java.net.URL;
+ +30 + + + + + + +
import java.time.LocalDate;
+ +31 + + + + + + +
import java.util.Enumeration;
+ +32 + + + + + + +
import java.util.NoSuchElementException;
+ +33 + + + + + + +
import java.util.jar.Manifest;
+ +34 + + + + + + +
import lombok.Value;
+ +35 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +36 + + + + + + +
+ +37 + + + + + + +
/**
+ +38 + + + + + + +
 * Contains version information for the com.yubico.webauthn package.
+ +39 + + + + + + +
 *
+ +40 + + + + + + +
 * @see Specification
+ +41 + + + + + + +
 */
+ +42 + + + + + + +
@Slf4j
+ +43 + + + + + + +
@Value
+ +44 + + + + + + +
public class VersionInfo {
+ +45 + + + + + + +
+ +46 + + + + + + +
  private static VersionInfo instance;
+ +47 + + + + + + +
+ +48 + + + + + + +
  public static VersionInfo getInstance() {
+ +49 + + +1 + +1. getInstance : negated conditional → NO_COVERAGE
+ +
+
+
    if (instance == null) {
+ +50 + + + + + + +
      try {
+ +51 + + + + + + +
        instance = new VersionInfo();
+ +52 + + + + + + +
      } catch (IOException e) {
+ +53 + + + + + + +
        throw ExceptionUtil.wrapAndLog(log, "Failed to create VersionInfo", e);
+ +54 + + + + + + +
      }
+ +55 + + + + + + +
    }
+ +56 + + + + + + +
+ +57 + + +1 + +1. getInstance : replaced return value with null for com/yubico/webauthn/meta/VersionInfo::getInstance → NO_COVERAGE
+ +
+
+
    return instance;
+ +58 + + + + + + +
  }
+ +59 + + + + + + +
+ +60 + + + + + + +
  /** Represents the specification this implementation is based on */
+ +61 + + + + + + +
  private final Specification specification =
+ +62 + + + + + + +
      Specification.builder()
+ +63 + + + + + + +
          .url(new URL(findValueInManifest("Specification-Url")))
+ +64 + + + + + + +
          .latestVersionUrl(new URL(findValueInManifest("Specification-Url-Latest")))
+ +65 + + + + + + +
          .status(DocumentStatus.fromString(findValueInManifest("Specification-W3c-Status")).get())
+ +66 + + + + + + +
          .releaseDate(LocalDate.parse(findValueInManifest("Specification-Release-Date")))
+ +67 + + + + + + +
          .build();
+ +68 + + + + + + +
+ +69 + + + + + + +
  /** Description of this version of this library */
+ +70 + + + + + + +
  private final Implementation implementation =
+ +71 + + + + + + +
      new Implementation(
+ +72 + + + + + + +
          findValueInManifest("Implementation-Version"),
+ +73 + + + + + + +
          new URL(findValueInManifest("Implementation-Source-Url")),
+ +74 + + + + + + +
          findValueInManifest("Git-Commit"));
+ +75 + + + + + + +
+ +76 + + + + + + +
  private VersionInfo() throws IOException {}
+ +77 + + + + + + +
+ +78 + + + + + + +
  private String findValueInManifest(String key) throws IOException {
+ +79 + + + + + + +
    final Enumeration<URL> resources =
+ +80 + + + + + + +
        getClass().getClassLoader().getResources("META-INF/MANIFEST.MF");
+ +81 + + + + + + +
+ +82 + + +1 + +1. findValueInManifest : negated conditional → NO_COVERAGE
+ +
+
+
    while (resources.hasMoreElements()) {
+ +83 + + + + + + +
      final URL resource = resources.nextElement();
+ +84 + + + + + + +
      final Manifest manifest = new Manifest(resource.openStream());
+ +85 + + + + + + +
      if ("java-webauthn-server"
+ +86 + + +1 + +1. findValueInManifest : negated conditional → NO_COVERAGE
+ +
+
+
          .equals(manifest.getMainAttributes().getValue("Implementation-Id"))) {
+ +87 + + +1 + +1. findValueInManifest : replaced return value with "" for com/yubico/webauthn/meta/VersionInfo::findValueInManifest → NO_COVERAGE
+ +
+
+
        return manifest.getMainAttributes().getValue(key);
+ +88 + + + + + + +
      }
+ +89 + + + + + + +
    }
+ +90 + + + + + + +
    throw new NoSuchElementException("Could not find \"" + key + "\" in manifest.");
+ +91 + + + + + + +
  }
+ +92 + + + + + + +
}

Mutations

49 + + + +

1.1
Location : getInstance
Killed by : none
negated conditional → NO_COVERAGE

+
57 + + + +

1.1
Location : getInstance
Killed by : none
replaced return value with null for com/yubico/webauthn/meta/VersionInfo::getInstance → NO_COVERAGE

+
82 + + + +

1.1
Location : findValueInManifest
Killed by : none
negated conditional → NO_COVERAGE

+
86 + + + +

1.1
Location : findValueInManifest
Killed by : none
negated conditional → NO_COVERAGE

+
87 + + + +

1.1
Location : findValueInManifest
Killed by : none
replaced return value with "" for com/yubico/webauthn/meta/VersionInfo::findValueInManifest → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/index.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/index.html new file mode 100644 index 000000000..56bbbf47c --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn.meta/index.html @@ -0,0 +1,76 @@ + + + + + + + + +

Pit Test Coverage Report

+

Package Summary

+

com.yubico.webauthn.meta

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
30%
0/45
0%
0/10
100%
0/0
+ + +

Breakdown by Class

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLine CoverageMutation CoverageTest Strength
DocumentStatus.java
0%
0/8
0%
0/4
100%
0/0
Specification.java
0%
0/7
0%
0/1
100%
0/0
VersionInfo.java
0%
0/30
0%
0/5
100%
0/0
+
+ + + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AndroidSafetynetAttestationStatementVerifier.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AndroidSafetynetAttestationStatementVerifier.java.html new file mode 100644 index 000000000..822716b0e --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AndroidSafetynetAttestationStatementVerifier.java.html @@ -0,0 +1,3265 @@ + + + + + + + + + +

AndroidSafetynetAttestationStatementVerifier.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.webauthn;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.databind.JsonNode;
+ +4 + + + + + + +
import com.fasterxml.jackson.databind.ObjectMapper;
+ +5 + + + + + + +
import com.fasterxml.jackson.databind.node.ArrayNode;
+ +6 + + + + + + +
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+ +7 + + + + + + +
import com.yubico.internal.util.CertificateParser;
+ +8 + + + + + + +
import com.yubico.internal.util.ExceptionUtil;
+ +9 + + + + + + +
import com.yubico.internal.util.JacksonCodecs;
+ +10 + + + + + + +
import com.yubico.webauthn.data.AttestationObject;
+ +11 + + + + + + +
import com.yubico.webauthn.data.AttestationType;
+ +12 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +13 + + + + + + +
import com.yubico.webauthn.data.exception.Base64UrlException;
+ +14 + + + + + + +
import java.io.IOException;
+ +15 + + + + + + +
import java.nio.charset.StandardCharsets;
+ +16 + + + + + + +
import java.security.InvalidKeyException;
+ +17 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +18 + + + + + + +
import java.security.Signature;
+ +19 + + + + + + +
import java.security.SignatureException;
+ +20 + + + + + + +
import java.security.cert.CertificateException;
+ +21 + + + + + + +
import java.security.cert.X509Certificate;
+ +22 + + + + + + +
import java.util.ArrayList;
+ +23 + + + + + + +
import java.util.List;
+ +24 + + + + + + +
import javax.net.ssl.SSLException;
+ +25 + + + + + + +
import lombok.Value;
+ +26 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +27 + + + + + + +
import org.apache.hc.client5.http.ssl.DefaultHostnameVerifier;
+ +28 + + + + + + +
+ +29 + + + + + + +
@Slf4j
+ +30 + + + + + + +
class AndroidSafetynetAttestationStatementVerifier
+ +31 + + + + + + +
    implements AttestationStatementVerifier, X5cAttestationStatementVerifier {
+ +32 + + + + + + +
+ +33 + + + + + + +
  private static final DefaultHostnameVerifier HOSTNAME_VERIFIER = new DefaultHostnameVerifier();
+ +34 + + + + + + +
+ +35 + + + + + + +
  @Override
+ +36 + + + + + + +
  public AttestationType getAttestationType(AttestationObject attestation) {
+ +37 + + +1 + +1. getAttestationType : replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getAttestationType → KILLED
+ +
+
+
    return AttestationType.BASIC;
+ +38 + + + + + + +
  }
+ +39 + + + + + + +
+ +40 + + + + + + +
  @Override
+ +41 + + + + + + +
  public JsonNode getX5cArray(AttestationObject attestationObject) {
+ +42 + + + + + + +
    JsonNodeFactory jsonFactory = JsonNodeFactory.instance;
+ +43 + + + + + + +
    ArrayNode array = jsonFactory.arrayNode();
+ +44 + + + + + + +
    for (JsonNode cert : parseJws(attestationObject).getHeader().get("x5c")) {
+ +45 + + + + + + +
      array.add(jsonFactory.binaryNode(ByteArray.fromBase64(cert.textValue()).getBytes()));
+ +46 + + + + + + +
    }
+ +47 + + +1 + +1. getX5cArray : replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getX5cArray → KILLED
+ +
+
+
    return array;
+ +48 + + + + + + +
  }
+ +49 + + + + + + +
+ +50 + + + + + + +
  @Override
+ +51 + + + + + + +
  public boolean verifyAttestationSignature(
+ +52 + + + + + + +
      AttestationObject attestationObject, ByteArray clientDataJsonHash) {
+ +53 + + + + + + +
    final JsonNode ver = attestationObject.getAttestationStatement().get("ver");
+ +54 + + + + + + +
+ +55 + + +2 + +1. verifyAttestationSignature : negated conditional → KILLED
+2. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    if (ver == null || !ver.isTextual()) {
+ +56 + + + + + + +
      throw new IllegalArgumentException(
+ +57 + + + + + + +
          "Property \"ver\" of android-safetynet attestation statement must be a string, was: "
+ +58 + + + + + + +
              + ver);
+ +59 + + + + + + +
    }
+ +60 + + + + + + +
+ +61 + + + + + + +
    JsonWebSignatureCustom jws = parseJws(attestationObject);
+ +62 + + + + + + +
+ +63 + + +1 + +1. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    if (!verifySignature(jws)) {
+ +64 + + +1 + +1. verifyAttestationSignature : replaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyAttestationSignature → KILLED
+ +
+
+
      return false;
+ +65 + + + + + + +
    }
+ +66 + + + + + + +
+ +67 + + + + + + +
    JsonNode payload = jws.getPayload();
+ +68 + + + + + + +
+ +69 + + + + + + +
    ByteArray signedData =
+ +70 + + + + + + +
        attestationObject.getAuthenticatorData().getBytes().concat(clientDataJsonHash);
+ +71 + + + + + + +
    ByteArray hashSignedData = Crypto.sha256(signedData);
+ +72 + + + + + + +
    ByteArray nonceByteArray = ByteArray.fromBase64(payload.get("nonce").textValue());
+ +73 + + +1 + +1. verifyAttestationSignature : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +74 + + + + + + +
        hashSignedData.equals(nonceByteArray),
+ +75 + + + + + + +
        "Nonce does not equal authenticator data + client data. Expected nonce: %s, was nonce: %s",
+ +76 + + + + + + +
        hashSignedData.getBase64Url(),
+ +77 + + + + + + +
        nonceByteArray.getBase64Url());
+ +78 + + + + + + +
+ +79 + + +1 + +1. verifyAttestationSignature : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +80 + + + + + + +
        payload.get("ctsProfileMatch").booleanValue(),
+ +81 + + + + + + +
        "Expected ctsProfileMatch to be true, was: %s",
+ +82 + + + + + + +
        payload.get("ctsProfileMatch"));
+ +83 + + + + + + +
+ +84 + + +1 + +1. verifyAttestationSignature : replaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyAttestationSignature → KILLED
+ +
+
+
    return true;
+ +85 + + + + + + +
  }
+ +86 + + + + + + +
+ +87 + + + + + + +
  private static JsonWebSignatureCustom parseJws(AttestationObject attestationObject) {
+ +88 + + +1 + +1. parseJws : replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::parseJws → KILLED
+ +
+
+
    return new JsonWebSignatureCustom(
+ +89 + + + + + + +
        new String(getResponseBytes(attestationObject).getBytes(), StandardCharsets.UTF_8));
+ +90 + + + + + + +
  }
+ +91 + + + + + + +
+ +92 + + + + + + +
  private static ByteArray getResponseBytes(AttestationObject attestationObject) {
+ +93 + + + + + + +
    final JsonNode response = attestationObject.getAttestationStatement().get("response");
+ +94 + + +2 + +1. getResponseBytes : negated conditional → KILLED
+2. getResponseBytes : negated conditional → KILLED
+ +
+
+
    if (response == null || !response.isBinary()) {
+ +95 + + + + + + +
      throw new IllegalArgumentException(
+ +96 + + + + + + +
          "Property \"response\" of android-safetynet attestation statement must be a binary value, was: "
+ +97 + + + + + + +
              + response);
+ +98 + + + + + + +
    }
+ +99 + + + + + + +
+ +100 + + + + + + +
    try {
+ +101 + + +1 + +1. getResponseBytes : replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getResponseBytes → KILLED
+ +
+
+
      return new ByteArray(response.binaryValue());
+ +102 + + + + + + +
    } catch (IOException ioe) {
+ +103 + + + + + + +
      throw ExceptionUtil.wrapAndLog(
+ +104 + + + + + + +
          log, "response.isBinary() was true but response.binaryValue failed: " + response, ioe);
+ +105 + + + + + + +
    }
+ +106 + + + + + + +
  }
+ +107 + + + + + + +
+ +108 + + + + + + +
  private boolean verifySignature(JsonWebSignatureCustom jws) {
+ +109 + + + + + + +
    // Verify the signature of the JWS and retrieve the signature certificate.
+ +110 + + + + + + +
    X509Certificate attestationCertificate = jws.getX5c().get(0);
+ +111 + + + + + + +
+ +112 + + + + + + +
    String signatureAlgorithmName =
+ +113 + + + + + + +
        WebAuthnCodecs.jwsAlgorithmNameToJavaAlgorithmName(jws.getAlgorithm());
+ +114 + + + + + + +
+ +115 + + + + + + +
    Signature signatureVerifier;
+ +116 + + + + + + +
    try {
+ +117 + + + + + + +
      signatureVerifier = Signature.getInstance(signatureAlgorithmName);
+ +118 + + + + + + +
    } catch (NoSuchAlgorithmException e) {
+ +119 + + + + + + +
      throw ExceptionUtil.wrapAndLog(
+ +120 + + + + + + +
          log, "Failed to get a Signature instance for " + signatureAlgorithmName, e);
+ +121 + + + + + + +
    }
+ +122 + + + + + + +
    try {
+ +123 + + +1 + +1. verifySignature : removed call to java/security/Signature::initVerify → KILLED
+ +
+
+
      signatureVerifier.initVerify(attestationCertificate.getPublicKey());
+ +124 + + + + + + +
    } catch (InvalidKeyException e) {
+ +125 + + + + + + +
      throw ExceptionUtil.wrapAndLog(
+ +126 + + + + + + +
          log, "Attestation key is invalid: " + attestationCertificate, e);
+ +127 + + + + + + +
    }
+ +128 + + + + + + +
    try {
+ +129 + + +1 + +1. verifySignature : removed call to java/security/Signature::update → KILLED
+ +
+
+
      signatureVerifier.update(jws.getSignedBytes().getBytes());
+ +130 + + + + + + +
    } catch (SignatureException e) {
+ +131 + + + + + + +
      throw ExceptionUtil.wrapAndLog(
+ +132 + + + + + + +
          log, "Signature object in invalid state: " + signatureVerifier, e);
+ +133 + + + + + + +
    }
+ +134 + + + + + + +
+ +135 + + + + + + +
    // Verify the hostname of the certificate.
+ +136 + + +1 + +1. verifySignature : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +137 + + + + + + +
        verifyHostname(attestationCertificate),
+ +138 + + + + + + +
        "Certificate isn't issued for the hostname attest.android.com: %s",
+ +139 + + + + + + +
        attestationCertificate);
+ +140 + + + + + + +
+ +141 + + + + + + +
    try {
+ +142 + + +2 + +1. verifySignature : replaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifySignature → KILLED
+2. verifySignature : replaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifySignature → KILLED
+ +
+
+
      return signatureVerifier.verify(jws.getSignature().getBytes());
+ +143 + + + + + + +
    } catch (SignatureException e) {
+ +144 + + + + + + +
      throw ExceptionUtil.wrapAndLog(log, "Failed to verify signature of JWS: " + jws, e);
+ +145 + + + + + + +
    }
+ +146 + + + + + + +
  }
+ +147 + + + + + + +
+ +148 + + + + + + +
  @Value
+ +149 + + + + + + +
  private static class JsonWebSignatureCustom {
+ +150 + + + + + + +
    public final JsonNode header;
+ +151 + + + + + + +
    public final JsonNode payload;
+ +152 + + + + + + +
    public final ByteArray signedBytes;
+ +153 + + + + + + +
    public final ByteArray signature;
+ +154 + + + + + + +
    public final List<X509Certificate> x5c;
+ +155 + + + + + + +
    public final String algorithm;
+ +156 + + + + + + +
+ +157 + + + + + + +
    JsonWebSignatureCustom(String jwsCompact) {
+ +158 + + + + + + +
      String[] parts = jwsCompact.split("\\.");
+ +159 + + + + + + +
      ObjectMapper json = JacksonCodecs.json();
+ +160 + + + + + + +
+ +161 + + + + + + +
      try {
+ +162 + + + + + + +
        final ByteArray header = ByteArray.fromBase64Url(parts[0]);
+ +163 + + + + + + +
        final ByteArray payload = ByteArray.fromBase64Url(parts[1]);
+ +164 + + + + + + +
+ +165 + + + + + + +
        this.header = json.readTree(header.getBytes());
+ +166 + + + + + + +
        this.payload = json.readTree(payload.getBytes());
+ +167 + + + + + + +
        this.signedBytes =
+ +168 + + + + + + +
            new ByteArray((parts[0] + "." + parts[1]).getBytes(StandardCharsets.UTF_8));
+ +169 + + + + + + +
        this.signature = ByteArray.fromBase64Url(parts[2]);
+ +170 + + + + + + +
        this.x5c = getX5c(this.header);
+ +171 + + + + + + +
        this.algorithm = this.header.get("alg").textValue();
+ +172 + + + + + + +
      } catch (IOException | Base64UrlException e) {
+ +173 + + + + + + +
        throw ExceptionUtil.wrapAndLog(log, "Failed to parse JWS: " + jwsCompact, e);
+ +174 + + + + + + +
      } catch (CertificateException e) {
+ +175 + + + + + + +
        throw ExceptionUtil.wrapAndLog(
+ +176 + + + + + + +
            log, "Failed to parse attestation certificates in JWS header: " + jwsCompact, e);
+ +177 + + + + + + +
      }
+ +178 + + + + + + +
    }
+ +179 + + + + + + +
+ +180 + + + + + + +
    private static List<X509Certificate> getX5c(JsonNode header)
+ +181 + + + + + + +
        throws IOException, CertificateException {
+ +182 + + + + + + +
      List<X509Certificate> result = new ArrayList<>();
+ +183 + + + + + + +
      for (JsonNode jsonNode : header.get("x5c")) {
+ +184 + + + + + + +
        result.add(CertificateParser.parseDer(jsonNode.binaryValue()));
+ +185 + + + + + + +
      }
+ +186 + + +1 + +1. getX5c : replaced return value with Collections.emptyList for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom::getX5c → KILLED
+ +
+
+
      return result;
+ +187 + + + + + + +
    }
+ +188 + + + + + + +
  }
+ +189 + + + + + + +
+ +190 + + + + + + +
  /** Verifies that the certificate matches the hostname "attest.android.com". */
+ +191 + + + + + + +
  private static boolean verifyHostname(X509Certificate leafCert) {
+ +192 + + + + + + +
    try {
+ +193 + + +1 + +1. verifyHostname : removed call to org/apache/hc/client5/http/ssl/DefaultHostnameVerifier::verify → KILLED
+ +
+
+
      HOSTNAME_VERIFIER.verify("attest.android.com", leafCert);
+ +194 + + +1 + +1. verifyHostname : replaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyHostname → KILLED
+ +
+
+
      return true;
+ +195 + + + + + + +
    } catch (SSLException e) {
+ +196 + + +1 + +1. verifyHostname : replaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyHostname → KILLED
+ +
+
+
      return false;
+ +197 + + + + + + +
    }
+ +198 + + + + + + +
  }
+ +199 + + + + + + +
}

Mutations

37 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getAttestationType → KILLED

+
47 + + + +

1.1
Location : getX5cArray
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getX5cArray → KILLED

+
55 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
63 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
64 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyAttestationSignature → KILLED

+
73 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
79 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
84 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyAttestationSignature → KILLED

+
88 + + + +

1.1
Location : parseJws
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::parseJws → KILLED

+
94 + + + +

1.1
Location : getResponseBytes
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : getResponseBytes
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
101 + + + +

1.1
Location : getResponseBytes
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getResponseBytes → KILLED

+
123 + + + +

1.1
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to java/security/Signature::initVerify → KILLED

+
129 + + + +

1.1
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to java/security/Signature::update → KILLED

+
136 + + + +

1.1
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
142 + + + +

1.1
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifySignature → KILLED

2.2
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifySignature → KILLED

+
186 + + + +

1.1
Location : getX5c
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Collections.emptyList for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom::getX5c → KILLED

+
193 + + + +

1.1
Location : verifyHostname
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to org/apache/hc/client5/http/ssl/DefaultHostnameVerifier::verify → KILLED

+
194 + + + +

1.1
Location : verifyHostname
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyHostname → KILLED

+
196 + + + +

1.1
Location : verifyHostname
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyHostname → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AppleAttestationStatementVerifier.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AppleAttestationStatementVerifier.java.html new file mode 100644 index 000000000..39123243b --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AppleAttestationStatementVerifier.java.html @@ -0,0 +1,2024 @@ + + + + + + + + + +

AppleAttestationStatementVerifier.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.internal.util.ExceptionUtil;
+ +28 + + + + + + +
import com.yubico.webauthn.data.AttestationObject;
+ +29 + + + + + + +
import com.yubico.webauthn.data.AttestationType;
+ +30 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +31 + + + + + + +
import java.security.PublicKey;
+ +32 + + + + + + +
import java.security.cert.CertificateException;
+ +33 + + + + + + +
import java.security.cert.X509Certificate;
+ +34 + + + + + + +
import java.util.Optional;
+ +35 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +36 + + + + + + +
+ +37 + + + + + + +
@Slf4j
+ +38 + + + + + + +
final class AppleAttestationStatementVerifier
+ +39 + + + + + + +
    implements AttestationStatementVerifier, X5cAttestationStatementVerifier {
+ +40 + + + + + + +
+ +41 + + + + + + +
  private static final String NONCE_EXTENSION_OID = "1.2.840.113635.100.8.2";
+ +42 + + + + + + +
+ +43 + + + + + + +
  @Override
+ +44 + + + + + + +
  public AttestationType getAttestationType(AttestationObject attestation) {
+ +45 + + +1 + +1. getAttestationType : replaced return value with null for com/yubico/webauthn/AppleAttestationStatementVerifier::getAttestationType → KILLED
+ +
+
+
    return AttestationType.ANONYMIZATION_CA;
+ +46 + + + + + + +
  }
+ +47 + + + + + + +
+ +48 + + + + + + +
  @Override
+ +49 + + + + + + +
  public boolean verifyAttestationSignature(
+ +50 + + + + + + +
      AttestationObject attestationObject, ByteArray clientDataJsonHash) {
+ +51 + + + + + + +
    final Optional<X509Certificate> attestationCert;
+ +52 + + + + + + +
    try {
+ +53 + + + + + + +
      attestationCert = getX5cAttestationCertificate(attestationObject);
+ +54 + + + + + + +
    } catch (CertificateException e) {
+ +55 + + + + + + +
      throw ExceptionUtil.wrapAndLog(
+ +56 + + + + + + +
          log,
+ +57 + + + + + + +
          String.format(
+ +58 + + + + + + +
              "Failed to parse X.509 certificate from attestation object: %s", attestationObject),
+ +59 + + + + + + +
          e);
+ +60 + + + + + + +
    }
+ +61 + + + + + + +
+ +62 + + +2 + +1. verifyAttestationSignature : replaced boolean return with true for com/yubico/webauthn/AppleAttestationStatementVerifier::verifyAttestationSignature → SURVIVED
+2. verifyAttestationSignature : replaced boolean return with false for com/yubico/webauthn/AppleAttestationStatementVerifier::verifyAttestationSignature → KILLED
+ +
+
+
    return attestationCert
+ +63 + + + + + + +
        .map(
+ +64 + + + + + + +
            attestationCertificate -> {
+ +65 + + + + + + +
              final ByteArray nonceToHash =
+ +66 + + + + + + +
                  attestationObject.getAuthenticatorData().getBytes().concat(clientDataJsonHash);
+ +67 + + + + + + +
+ +68 + + + + + + +
              final ByteArray nonce = Crypto.sha256(nonceToHash);
+ +69 + + + + + + +
+ +70 + + + + + + +
              byte[] nonceExtension = attestationCertificate.getExtensionValue(NONCE_EXTENSION_OID);
+ +71 + + +1 + +1. lambda$verifyAttestationSignature$0 : negated conditional → KILLED
+ +
+
+
              if (nonceExtension == null) {
+ +72 + + + + + + +
                throw new IllegalArgumentException(
+ +73 + + + + + + +
                    "Apple anonymous attestation certificate must contain extension OID: "
+ +74 + + + + + + +
                        + NONCE_EXTENSION_OID);
+ +75 + + + + + + +
              }
+ +76 + + + + + + +
+ +77 + + + + + + +
              // X.509 extension values is a DER octet string: 0x0426
+ +78 + + + + + + +
              // Then the extension contains a 1-element sequence: 0x3024
+ +79 + + + + + + +
              // The element has context-specific tag "[1]": 0xa122
+ +80 + + + + + + +
              // Then the sequence contains a 32-byte octet string: 0x0420
+ +81 + + + + + + +
              final ByteArray expectedExtensionValue =
+ +82 + + + + + + +
                  new ByteArray(
+ +83 + + + + + + +
                          new byte[] {
+ +84 + + + + + + +
                            0x04, 0x26, 0x30, 0x24, (-128) + (0xa1 - 128), 0x22, 0x04, 0x20
+ +85 + + + + + + +
                          })
+ +86 + + + + + + +
                      .concat(nonce);
+ +87 + + + + + + +
+ +88 + + +1 + +1. lambda$verifyAttestationSignature$0 : negated conditional → KILLED
+ +
+
+
              if (!expectedExtensionValue.equals(new ByteArray(nonceExtension))) {
+ +89 + + + + + + +
                throw new IllegalArgumentException(
+ +90 + + + + + + +
                    String.format(
+ +91 + + + + + + +
                        "Apple anonymous attestation certificate extension %s must equal nonceToHash. Expected: %s, was: %s",
+ +92 + + + + + + +
                        NONCE_EXTENSION_OID,
+ +93 + + + + + + +
                        expectedExtensionValue,
+ +94 + + + + + + +
                        new ByteArray(nonceExtension)));
+ +95 + + + + + + +
              }
+ +96 + + + + + + +
+ +97 + + + + + + +
              final PublicKey credentialPublicKey;
+ +98 + + + + + + +
              try {
+ +99 + + + + + + +
                credentialPublicKey =
+ +100 + + + + + + +
                    WebAuthnCodecs.importCosePublicKey(
+ +101 + + + + + + +
                        attestationObject
+ +102 + + + + + + +
                            .getAuthenticatorData()
+ +103 + + + + + + +
                            .getAttestedCredentialData()
+ +104 + + + + + + +
                            .get()
+ +105 + + + + + + +
                            .getCredentialPublicKey());
+ +106 + + + + + + +
              } catch (Exception e) {
+ +107 + + + + + + +
                throw ExceptionUtil.wrapAndLog(log, "Failed to import credential public key", e);
+ +108 + + + + + + +
              }
+ +109 + + + + + + +
+ +110 + + + + + + +
              final PublicKey certPublicKey = attestationCertificate.getPublicKey();
+ +111 + + + + + + +
+ +112 + + +1 + +1. lambda$verifyAttestationSignature$0 : negated conditional → KILLED
+ +
+
+
              if (!credentialPublicKey.equals(certPublicKey)) {
+ +113 + + + + + + +
                throw new IllegalArgumentException(
+ +114 + + + + + + +
                    String.format(
+ +115 + + + + + + +
                        "Apple anonymous attestation certificate subject public key must equal credential public key. Expected: %s, was: %s",
+ +116 + + + + + + +
                        credentialPublicKey, certPublicKey));
+ +117 + + + + + + +
              }
+ +118 + + + + + + +
+ +119 + + +1 + +1. lambda$verifyAttestationSignature$0 : replaced Boolean return with False for com/yubico/webauthn/AppleAttestationStatementVerifier::lambda$verifyAttestationSignature$0 → KILLED
+ +
+
+
              return true;
+ +120 + + + + + + +
            })
+ +121 + + + + + + +
        .orElseThrow(
+ +122 + + + + + + +
            () ->
+ +123 + + +1 + +1. lambda$verifyAttestationSignature$1 : replaced return value with null for com/yubico/webauthn/AppleAttestationStatementVerifier::lambda$verifyAttestationSignature$1 → NO_COVERAGE
+ +
+
+
                new IllegalArgumentException(
+ +124 + + + + + + +
                    "Failed to parse attestation certificate from \"apple\" attestation statement."));
+ +125 + + + + + + +
  }
+ +126 + + + + + + +
}

Mutations

45 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/AppleAttestationStatementVerifier::getAttestationType → KILLED

+
62 + + + +

1.1
Location : verifyAttestationSignature
Killed by : none
replaced boolean return with true for com/yubico/webauthn/AppleAttestationStatementVerifier::verifyAttestationSignature → SURVIVED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with false for com/yubico/webauthn/AppleAttestationStatementVerifier::verifyAttestationSignature → KILLED

+
71 + + + +

1.1
Location : lambda$verifyAttestationSignature$0
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
88 + + + +

1.1
Location : lambda$verifyAttestationSignature$0
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
112 + + + +

1.1
Location : lambda$verifyAttestationSignature$0
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
119 + + + +

1.1
Location : lambda$verifyAttestationSignature$0
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced Boolean return with False for com/yubico/webauthn/AppleAttestationStatementVerifier::lambda$verifyAttestationSignature$0 → KILLED

+
123 + + + +

1.1
Location : lambda$verifyAttestationSignature$1
Killed by : none
replaced return value with null for com/yubico/webauthn/AppleAttestationStatementVerifier::lambda$verifyAttestationSignature$1 → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionRequest.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionRequest.java.html new file mode 100644 index 000000000..2a2e8f60a --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionRequest.java.html @@ -0,0 +1,4813 @@ + + + + + + + + + +

AssertionRequest.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +29 + + + + + + +
import com.fasterxml.jackson.core.JsonProcessingException;
+ +30 + + + + + + +
import com.yubico.internal.util.JacksonCodecs;
+ +31 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +32 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialRequestOptions;
+ +33 + + + + + + +
import java.util.Optional;
+ +34 + + + + + + +
import lombok.Builder;
+ +35 + + + + + + +
import lombok.NonNull;
+ +36 + + + + + + +
import lombok.Value;
+ +37 + + + + + + +
+ +38 + + + + + + +
/**
+ +39 + + + + + + +
 * A combination of a {@link PublicKeyCredentialRequestOptions} and, optionally, a {@link
+ +40 + + + + + + +
 * #getUsername() username} or {@link #getUserHandle() user handle}.
+ +41 + + + + + + +
 */
+ +42 + + + + + + +
@Value
+ +43 + + + + + + +
@Builder(toBuilder = true)
+ +44 + + + + + + +
public class AssertionRequest {
+ +45 + + + + + + +
+ +46 + + + + + + +
  /**
+ +47 + + + + + + +
   * An object that can be serialized to JSON and passed as the <code>publicKey</code> argument to
+ +48 + + + + + + +
   * <code>navigator.credentials.get()</code>.
+ +49 + + + + + + +
   */
+ +50 + + + + + + +
  @NonNull private final PublicKeyCredentialRequestOptions publicKeyCredentialRequestOptions;
+ +51 + + + + + + +
+ +52 + + + + + + +
  /**
+ +53 + + + + + + +
   * The username of the user to authenticate, if the user has already been identified.
+ +54 + + + + + + +
   *
+ +55 + + + + + + +
   * <p>This is mutually exclusive with {@link #getUserHandle() userHandle}; setting this will unset
+ +56 + + + + + + +
   * {@link #getUserHandle() userHandle}. When parsing from JSON, {@link #getUserHandle()
+ +57 + + + + + + +
   * userHandle} takes precedence over this.
+ +58 + + + + + + +
   *
+ +59 + + + + + + +
   * <p>If both this and {@link #getUserHandle() userHandle} are empty, this indicates that this is
+ +60 + + + + + + +
   * a request for an assertion by a <a
+ +61 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">client-side-discoverable
+ +62 + + + + + + +
   * credential</a> (passkey). Identification of the user is therefore deferred until the response
+ +63 + + + + + + +
   * is received.
+ +64 + + + + + + +
   *
+ +65 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +66 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +67 + + + + + + +
   */
+ +68 + + + + + + +
  private final String username;
+ +69 + + + + + + +
+ +70 + + + + + + +
  /**
+ +71 + + + + + + +
   * The user handle of the user to authenticate, if the user has already been identified.
+ +72 + + + + + + +
   *
+ +73 + + + + + + +
   * <p>This is mutually exclusive with {@link #getUsername() username}; setting this will unset
+ +74 + + + + + + +
   * {@link #getUsername() username}. When parsing from JSON, this takes precedence over {@link
+ +75 + + + + + + +
   * #getUsername() username}.
+ +76 + + + + + + +
   *
+ +77 + + + + + + +
   * <p>If both this and {@link #getUsername() username} are empty, this indicates that this is a
+ +78 + + + + + + +
   * request for an assertion by a <a
+ +79 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">client-side-discoverable
+ +80 + + + + + + +
   * credential</a> (passkey). Identification of the user is therefore deferred until the response
+ +81 + + + + + + +
   * is received.
+ +82 + + + + + + +
   *
+ +83 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +84 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +85 + + + + + + +
   */
+ +86 + + + + + + +
  private final ByteArray userHandle;
+ +87 + + + + + + +
+ +88 + + + + + + +
  @JsonCreator
+ +89 + + + + + + +
  private AssertionRequest(
+ +90 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("publicKeyCredentialRequestOptions")
+ +91 + + + + + + +
          PublicKeyCredentialRequestOptions publicKeyCredentialRequestOptions,
+ +92 + + + + + + +
      @JsonProperty("username") String username,
+ +93 + + + + + + +
      @JsonProperty("userHandle") ByteArray userHandle) {
+ +94 + + + + + + +
    this.publicKeyCredentialRequestOptions = publicKeyCredentialRequestOptions;
+ +95 + + + + + + +
+ +96 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
    if (userHandle != null) {
+ +97 + + + + + + +
      this.username = null;
+ +98 + + + + + + +
      this.userHandle = userHandle;
+ +99 + + + + + + +
    } else {
+ +100 + + + + + + +
      this.username = username;
+ +101 + + + + + + +
      this.userHandle = null;
+ +102 + + + + + + +
    }
+ +103 + + + + + + +
  }
+ +104 + + + + + + +
+ +105 + + + + + + +
  /**
+ +106 + + + + + + +
   * The username of the user to authenticate, if the user has already been identified.
+ +107 + + + + + + +
   *
+ +108 + + + + + + +
   * <p>This is mutually exclusive with {@link #getUserHandle()}; if this is present, then {@link
+ +109 + + + + + + +
   * #getUserHandle()} will be empty.
+ +110 + + + + + + +
   *
+ +111 + + + + + + +
   * <p>If both this and {@link #getUserHandle()} are empty, this indicates that this is a request
+ +112 + + + + + + +
   * for an assertion by a <a
+ +113 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">client-side-discoverable
+ +114 + + + + + + +
   * credential</a> (passkey). Identification of the user is therefore deferred until the response
+ +115 + + + + + + +
   * is received.
+ +116 + + + + + + +
   *
+ +117 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +118 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +119 + + + + + + +
   */
+ +120 + + + + + + +
  public Optional<String> getUsername() {
+ +121 + + +1 + +1. getUsername : replaced return value with Optional.empty for com/yubico/webauthn/AssertionRequest::getUsername → KILLED
+ +
+
+
    return Optional.ofNullable(username);
+ +122 + + + + + + +
  }
+ +123 + + + + + + +
+ +124 + + + + + + +
  /**
+ +125 + + + + + + +
   * The user handle of the user to authenticate, if the user has already been identified.
+ +126 + + + + + + +
   *
+ +127 + + + + + + +
   * <p>This is mutually exclusive with {@link #getUsername()}; if this is present, then {@link
+ +128 + + + + + + +
   * #getUsername()} will be empty.
+ +129 + + + + + + +
   *
+ +130 + + + + + + +
   * <p>If both this and {@link #getUsername()} are empty, this indicates that this is a request for
+ +131 + + + + + + +
   * an assertion by a <a
+ +132 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">client-side-discoverable
+ +133 + + + + + + +
   * credential</a> (passkey). Identification of the user is therefore deferred until the response
+ +134 + + + + + + +
   * is received.
+ +135 + + + + + + +
   *
+ +136 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +137 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +138 + + + + + + +
   */
+ +139 + + + + + + +
  public Optional<ByteArray> getUserHandle() {
+ +140 + + +1 + +1. getUserHandle : replaced return value with Optional.empty for com/yubico/webauthn/AssertionRequest::getUserHandle → KILLED
+ +
+
+
    return Optional.ofNullable(userHandle);
+ +141 + + + + + + +
  }
+ +142 + + + + + + +
+ +143 + + + + + + +
  /**
+ +144 + + + + + + +
   * Serialize this {@link AssertionRequest} value to JSON suitable for sending to the client.
+ +145 + + + + + + +
   *
+ +146 + + + + + + +
   * <p>This is an alias of <code>getPublicKeyCredentialRequestOptions().toCredentialsGetJson()
+ +147 + + + + + + +
   * </code>.
+ +148 + + + + + + +
   *
+ +149 + + + + + + +
   * <p>Any {@link ByteArray} values in this data structure will be {@link ByteArray#getBase64Url()
+ +150 + + + + + + +
   * Base64Url} encoded. Those values MUST be decoded into <code>BufferSource</code> values (such as
+ +151 + + + + + + +
   * <code>Uint8Array</code>) on the client side before calling <code>navigator.credentials.get()
+ +152 + + + + + + +
   * </code>.
+ +153 + + + + + + +
   *
+ +154 + + + + + + +
   * <p>After decoding binary values, the resulting JavaScript object is suitable for passing as an
+ +155 + + + + + + +
   * argument to <code>navigator.credentials.get()</code>.
+ +156 + + + + + + +
   *
+ +157 + + + + + + +
   * @return a JSON value suitable for sending to the client and passing as an argument to <code>
+ +158 + + + + + + +
   *     navigator.credentials.get()</code>, after decoding binary options from Base64Url strings.
+ +159 + + + + + + +
   * @throws JsonProcessingException if JSON serialization fails.
+ +160 + + + + + + +
   */
+ +161 + + + + + + +
  public String toCredentialsGetJson() throws JsonProcessingException {
+ +162 + + +1 + +1. toCredentialsGetJson : replaced return value with "" for com/yubico/webauthn/AssertionRequest::toCredentialsGetJson → KILLED
+ +
+
+
    return publicKeyCredentialRequestOptions.toCredentialsGetJson();
+ +163 + + + + + + +
  }
+ +164 + + + + + + +
+ +165 + + + + + + +
  /**
+ +166 + + + + + + +
   * Encode this {@link AssertionRequest} to JSON. The inverse of {@link #fromJson(String)}.
+ +167 + + + + + + +
   *
+ +168 + + + + + + +
   * <p>This method is suitable for encoding the {@link AssertionRequest} for temporary storage so
+ +169 + + + + + + +
   * that it can later be passed as an argument to {@link
+ +170 + + + + + + +
   * RelyingParty#finishAssertion(FinishAssertionOptions)}. The {@link #fromJson(String)} factory
+ +171 + + + + + + +
   * function is guaranteed to restore an identical {@link AssertionRequest} instance.
+ +172 + + + + + + +
   *
+ +173 + + + + + + +
   * <p>Note that encoding might not be needed if you can simply keep the {@link AssertionRequest}
+ +174 + + + + + + +
   * instance in server memory.
+ +175 + + + + + + +
   *
+ +176 + + + + + + +
   * @return this {@link AssertionRequest} encoded to JSON.
+ +177 + + + + + + +
   * @throws JsonProcessingException
+ +178 + + + + + + +
   */
+ +179 + + + + + + +
  public String toJson() throws JsonProcessingException {
+ +180 + + +1 + +1. toJson : replaced return value with "" for com/yubico/webauthn/AssertionRequest::toJson → KILLED
+ +
+
+
    return JacksonCodecs.json().writeValueAsString(this);
+ +181 + + + + + + +
  }
+ +182 + + + + + + +
+ +183 + + + + + + +
  /**
+ +184 + + + + + + +
   * Decode an {@link AssertionRequest} from JSON. The inverse of {@link #toJson()}.
+ +185 + + + + + + +
   *
+ +186 + + + + + + +
   * <p>If the JSON was generated by the {@link #toJson()} method, then {@link #fromJson(String)} in
+ +187 + + + + + + +
   * the same library version guarantees to restore an identical {@link AssertionRequest} instance.
+ +188 + + + + + + +
   * This is not guaranteed between different library versions.
+ +189 + + + + + + +
   *
+ +190 + + + + + + +
   * @return a {@link AssertionRequest} decoded from the input JSON.
+ +191 + + + + + + +
   * @throws JsonProcessingException
+ +192 + + + + + + +
   */
+ +193 + + + + + + +
  public static AssertionRequest fromJson(String json) throws JsonProcessingException {
+ +194 + + +1 + +1. fromJson : replaced return value with null for com/yubico/webauthn/AssertionRequest::fromJson → KILLED
+ +
+
+
    return JacksonCodecs.json().readValue(json, AssertionRequest.class);
+ +195 + + + + + + +
  }
+ +196 + + + + + + +
+ +197 + + + + + + +
  public static AssertionRequestBuilder.MandatoryStages builder() {
+ +198 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/AssertionRequest::builder → KILLED
+ +
+
+
    return new AssertionRequestBuilder.MandatoryStages();
+ +199 + + + + + + +
  }
+ +200 + + + + + + +
+ +201 + + + + + + +
  public static class AssertionRequestBuilder {
+ +202 + + + + + + +
    private String username = null;
+ +203 + + + + + + +
    private ByteArray userHandle = null;
+ +204 + + + + + + +
+ +205 + + + + + + +
    public static class MandatoryStages {
+ +206 + + + + + + +
      private final AssertionRequestBuilder builder = new AssertionRequestBuilder();
+ +207 + + + + + + +
+ +208 + + + + + + +
      /**
+ +209 + + + + + + +
       * {@link
+ +210 + + + + + + +
       * AssertionRequestBuilder#publicKeyCredentialRequestOptions(PublicKeyCredentialRequestOptions)
+ +211 + + + + + + +
       * publicKeyCredentialRequestOptions} is a required parameter.
+ +212 + + + + + + +
       *
+ +213 + + + + + + +
       * @see
+ +214 + + + + + + +
       *     AssertionRequestBuilder#publicKeyCredentialRequestOptions(PublicKeyCredentialRequestOptions)
+ +215 + + + + + + +
       */
+ +216 + + + + + + +
      public AssertionRequestBuilder publicKeyCredentialRequestOptions(
+ +217 + + + + + + +
          PublicKeyCredentialRequestOptions publicKeyCredentialRequestOptions) {
+ +218 + + +1 + +1. publicKeyCredentialRequestOptions : replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder$MandatoryStages::publicKeyCredentialRequestOptions → KILLED
+ +
+
+
        return builder.publicKeyCredentialRequestOptions(publicKeyCredentialRequestOptions);
+ +219 + + + + + + +
      }
+ +220 + + + + + + +
    }
+ +221 + + + + + + +
+ +222 + + + + + + +
    /**
+ +223 + + + + + + +
     * The username of the user to authenticate, if the user has already been identified.
+ +224 + + + + + + +
     *
+ +225 + + + + + + +
     * <p>This is mutually exclusive with {@link #userHandle(ByteArray)}; setting this to non-empty
+ +226 + + + + + + +
     * will unset {@link #userHandle(ByteArray)}.
+ +227 + + + + + + +
     *
+ +228 + + + + + + +
     * <p>If this is empty, this indicates that this is a request for an assertion by a <a
+ +229 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">client-side-discoverable
+ +230 + + + + + + +
     * credential</a> (passkey). Identification of the user is therefore deferred until the response
+ +231 + + + + + + +
     * is received.
+ +232 + + + + + + +
     *
+ +233 + + + + + + +
     * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +234 + + + + + + +
     *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +235 + + + + + + +
     */
+ +236 + + +1 + +1. username : negated conditional → KILLED
+ +
+
+
    public AssertionRequestBuilder username(@NonNull Optional<String> username) {
+ +237 + + +1 + +1. username : replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::username → KILLED
+ +
+
+
      return this.username(username.orElse(null));
+ +238 + + + + + + +
    }
+ +239 + + + + + + +
+ +240 + + + + + + +
    /**
+ +241 + + + + + + +
     * The username of the user to authenticate, if the user has already been identified.
+ +242 + + + + + + +
     *
+ +243 + + + + + + +
     * <p>This is mutually exclusive with {@link #userHandle(ByteArray)}; setting this to non-<code>
+ +244 + + + + + + +
     * null</code> will unset {@link #userHandle(ByteArray)}.
+ +245 + + + + + + +
     *
+ +246 + + + + + + +
     * <p>If this is empty, this indicates that this is a request for an assertion by a <a
+ +247 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">client-side-discoverable
+ +248 + + + + + + +
     * credential</a> (passkey). Identification of the user is therefore deferred until the response
+ +249 + + + + + + +
     * is received.
+ +250 + + + + + + +
     *
+ +251 + + + + + + +
     * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +252 + + + + + + +
     *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +253 + + + + + + +
     */
+ +254 + + + + + + +
    public AssertionRequestBuilder username(String username) {
+ +255 + + + + + + +
      this.username = username;
+ +256 + + +1 + +1. username : negated conditional → KILLED
+ +
+
+
      if (username != null) {
+ +257 + + + + + + +
        this.userHandle = null;
+ +258 + + + + + + +
      }
+ +259 + + +1 + +1. username : replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::username → KILLED
+ +
+
+
      return this;
+ +260 + + + + + + +
    }
+ +261 + + + + + + +
+ +262 + + + + + + +
    /**
+ +263 + + + + + + +
     * The user handle of the user to authenticate, if the user has already been identified.
+ +264 + + + + + + +
     *
+ +265 + + + + + + +
     * <p>This is mutually exclusive with {@link #username(String)}; setting this to non-empty will
+ +266 + + + + + + +
     * unset {@link #username(String)}.
+ +267 + + + + + + +
     *
+ +268 + + + + + + +
     * <p>If both this and {@link #username(String)} are empty, this indicates that this is a
+ +269 + + + + + + +
     * request for an assertion by a <a
+ +270 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">client-side-discoverable
+ +271 + + + + + + +
     * credential</a> (passkey). Identification of the user is therefore deferred until the response
+ +272 + + + + + + +
     * is received.
+ +273 + + + + + + +
     *
+ +274 + + + + + + +
     * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +275 + + + + + + +
     *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +276 + + + + + + +
     */
+ +277 + + +1 + +1. userHandle : negated conditional → KILLED
+ +
+
+
    public AssertionRequestBuilder userHandle(@NonNull Optional<ByteArray> userHandle) {
+ +278 + + +1 + +1. userHandle : replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::userHandle → KILLED
+ +
+
+
      return this.userHandle(userHandle.orElse(null));
+ +279 + + + + + + +
    }
+ +280 + + + + + + +
+ +281 + + + + + + +
    /**
+ +282 + + + + + + +
     * The user handle of the user to authenticate, if the user has already been identified.
+ +283 + + + + + + +
     *
+ +284 + + + + + + +
     * <p>This is mutually exclusive with {@link #username(String)}; setting this to non-<code>null
+ +285 + + + + + + +
     * </code> will unset {@link #username(String)}.
+ +286 + + + + + + +
     *
+ +287 + + + + + + +
     * <p>If both this and {@link #username(String)} are empty, this indicates that this is a
+ +288 + + + + + + +
     * request for an assertion by a <a
+ +289 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">client-side-discoverable
+ +290 + + + + + + +
     * credential</a> (passkey). Identification of the user is therefore deferred until the response
+ +291 + + + + + + +
     * is received.
+ +292 + + + + + + +
     *
+ +293 + + + + + + +
     * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +294 + + + + + + +
     *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +295 + + + + + + +
     */
+ +296 + + + + + + +
    public AssertionRequestBuilder userHandle(ByteArray userHandle) {
+ +297 + + +1 + +1. userHandle : negated conditional → KILLED
+ +
+
+
      if (userHandle != null) {
+ +298 + + + + + + +
        this.username = null;
+ +299 + + + + + + +
      }
+ +300 + + + + + + +
      this.userHandle = userHandle;
+ +301 + + +1 + +1. userHandle : replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::userHandle → KILLED
+ +
+
+
      return this;
+ +302 + + + + + + +
    }
+ +303 + + + + + + +
  }
+ +304 + + + + + + +
}

Mutations

90 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
96 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
121 + + + +

1.1
Location : getUsername
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/AssertionRequest::getUsername → KILLED

+
140 + + + +

1.1
Location : getUserHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/AssertionRequest::getUserHandle → KILLED

+
162 + + + +

1.1
Location : toCredentialsGetJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with "" for com/yubico/webauthn/AssertionRequest::toCredentialsGetJson → KILLED

+
180 + + + +

1.1
Location : toJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with "" for com/yubico/webauthn/AssertionRequest::toJson → KILLED

+
194 + + + +

1.1
Location : fromJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with null for com/yubico/webauthn/AssertionRequest::fromJson → KILLED

+
198 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/AssertionRequest::builder → KILLED

+
218 + + + +

1.1
Location : publicKeyCredentialRequestOptions
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder$MandatoryStages::publicKeyCredentialRequestOptions → KILLED

+
236 + + + +

1.1
Location : username
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
237 + + + +

1.1
Location : username
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::username → KILLED

+
256 + + + +

1.1
Location : username
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
259 + + + +

1.1
Location : username
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::username → KILLED

+
277 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
278 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::userHandle → KILLED

+
297 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
301 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::userHandle → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionResult.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionResult.java.html new file mode 100644 index 000000000..9882c2a0d --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionResult.java.html @@ -0,0 +1,4469 @@ + + + + + + + + + +

AssertionResult.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnore;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +30 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs;
+ +31 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAssertionResponse;
+ +32 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAttachment;
+ +33 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorData;
+ +34 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorDataFlags;
+ +35 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorResponse;
+ +36 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +37 + + + + + + +
import com.yubico.webauthn.data.ClientAssertionExtensionOutputs;
+ +38 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredential;
+ +39 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialRequestOptions;
+ +40 + + + + + + +
import com.yubico.webauthn.data.UserIdentity;
+ +41 + + + + + + +
import java.util.Optional;
+ +42 + + + + + + +
import lombok.AccessLevel;
+ +43 + + + + + + +
import lombok.Getter;
+ +44 + + + + + + +
import lombok.NonNull;
+ +45 + + + + + + +
import lombok.Value;
+ +46 + + + + + + +
+ +47 + + + + + + +
/** The result of a call to {@link RelyingParty#finishAssertion(FinishAssertionOptions)}. */
+ +48 + + + + + + +
@Value
+ +49 + + + + + + +
public class AssertionResult {
+ +50 + + + + + + +
+ +51 + + + + + + +
  /** <code>true</code> if the assertion was verified successfully. */
+ +52 + + + + + + +
  private final boolean success;
+ +53 + + + + + + +
+ +54 + + + + + + +
  @JsonProperty
+ +55 + + + + + + +
  @Getter(AccessLevel.NONE)
+ +56 + + + + + + +
  private final PublicKeyCredential<AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs>
+ +57 + + + + + + +
      credentialResponse;
+ +58 + + + + + + +
+ +59 + + + + + + +
  /**
+ +60 + + + + + + +
   * The {@link RegisteredCredential} that was returned by {@link
+ +61 + + + + + + +
   * CredentialRepository#lookup(ByteArray, ByteArray)} and whose public key was used to
+ +62 + + + + + + +
   * successfully verify the assertion signature.
+ +63 + + + + + + +
   *
+ +64 + + + + + + +
   * <p>NOTE: The {@link RegisteredCredential#getSignatureCount() signature count}, {@link
+ +65 + + + + + + +
   * RegisteredCredential#isBackupEligible() backup eligibility} and {@link
+ +66 + + + + + + +
   * RegisteredCredential#isBackedUp() backup state} properties in this object will reflect the
+ +67 + + + + + + +
   * state <i>before</i> the assertion operation, not the new state. When updating your database
+ +68 + + + + + + +
   * state, use the signature counter and backup state from {@link #getSignatureCount()}, {@link
+ +69 + + + + + + +
   * #isBackupEligible()} and {@link #isBackedUp()} instead.
+ +70 + + + + + + +
   */
+ +71 + + + + + + +
  private final RegisteredCredential credential;
+ +72 + + + + + + +
+ +73 + + + + + + +
  /**
+ +74 + + + + + + +
   * The username of the authenticated user.
+ +75 + + + + + + +
   *
+ +76 + + + + + + +
   * @see #getUserHandle()
+ +77 + + + + + + +
   */
+ +78 + + + + + + +
  @NonNull private final String username;
+ +79 + + + + + + +
+ +80 + + + + + + +
  /**
+ +81 + + + + + + +
   * <code>true</code> if and only if at least one of the following is true:
+ +82 + + + + + + +
   *
+ +83 + + + + + + +
   * <ul>
+ +84 + + + + + + +
   *   <li>The {@link AuthenticatorData#getSignatureCounter() signature counter value} in the
+ +85 + + + + + + +
   *       assertion was strictly greater than {@link RegisteredCredential#getSignatureCount() the
+ +86 + + + + + + +
   *       stored one}.
+ +87 + + + + + + +
   *   <li>The {@link AuthenticatorData#getSignatureCounter() signature counter value} in the
+ +88 + + + + + + +
   *       assertion and {@link RegisteredCredential#getSignatureCount() the stored one} were both
+ +89 + + + + + + +
   *       zero.
+ +90 + + + + + + +
   * </ul>
+ +91 + + + + + + +
   *
+ +92 + + + + + + +
   * @see <a
+ +93 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-data">§6.1.
+ +94 + + + + + + +
   *     Authenticator Data</a>
+ +95 + + + + + + +
   * @see AuthenticatorData#getSignatureCounter()
+ +96 + + + + + + +
   * @see RegisteredCredential#getSignatureCount()
+ +97 + + + + + + +
   * @see com.yubico.webauthn.RelyingParty.RelyingPartyBuilder#validateSignatureCounter(boolean)
+ +98 + + + + + + +
   */
+ +99 + + + + + + +
  private final boolean signatureCounterValid;
+ +100 + + + + + + +
+ +101 + + + + + + +
  @JsonCreator
+ +102 + + + + + + +
  AssertionResult(
+ +103 + + + + + + +
      @JsonProperty("success") boolean success,
+ +104 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("credentialResponse")
+ +105 + + + + + + +
          PublicKeyCredential<AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs>
+ +106 + + + + + + +
              credentialResponse,
+ +107 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("credential") RegisteredCredential credential,
+ +108 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("username") String username,
+ +109 + + + + + + +
      @JsonProperty("signatureCounterValid") boolean signatureCounterValid) {
+ +110 + + + + + + +
    this.success = success;
+ +111 + + + + + + +
    this.credentialResponse = credentialResponse;
+ +112 + + + + + + +
    this.credential = credential;
+ +113 + + + + + + +
    this.username = username;
+ +114 + + + + + + +
    this.signatureCounterValid = signatureCounterValid;
+ +115 + + + + + + +
  }
+ +116 + + + + + + +
+ +117 + + + + + + +
  /**
+ +118 + + + + + + +
   * The <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#credential-id">credential
+ +119 + + + + + + +
   * ID</a> of the credential used for the assertion.
+ +120 + + + + + + +
   *
+ +121 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#credential-id">Credential
+ +122 + + + + + + +
   *     ID</a>
+ +123 + + + + + + +
   * @see PublicKeyCredentialRequestOptions#getAllowCredentials()
+ +124 + + + + + + +
   * @deprecated Use {@link #getCredential()}.{@link RegisteredCredential#getCredentialId()
+ +125 + + + + + + +
   *     getCredentialId()} instead.
+ +126 + + + + + + +
   */
+ +127 + + + + + + +
  @Deprecated
+ +128 + + + + + + +
  @JsonIgnore
+ +129 + + + + + + +
  public ByteArray getCredentialId() {
+ +130 + + +1 + +1. getCredentialId : replaced return value with null for com/yubico/webauthn/AssertionResult::getCredentialId → KILLED
+ +
+
+
    return credential.getCredentialId();
+ +131 + + + + + + +
  }
+ +132 + + + + + + +
+ +133 + + + + + + +
  /**
+ +134 + + + + + + +
   * The <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-handle">user handle</a>
+ +135 + + + + + + +
   * of the authenticated user.
+ +136 + + + + + + +
   *
+ +137 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-handle">User Handle</a>
+ +138 + + + + + + +
   * @see UserIdentity#getId()
+ +139 + + + + + + +
   * @see #getUsername()
+ +140 + + + + + + +
   * @deprecated Use {@link #getCredential()}.{@link RegisteredCredential#getUserHandle()
+ +141 + + + + + + +
   *     getUserHandle()} instead.
+ +142 + + + + + + +
   */
+ +143 + + + + + + +
  @Deprecated
+ +144 + + + + + + +
  @JsonIgnore
+ +145 + + + + + + +
  public ByteArray getUserHandle() {
+ +146 + + +1 + +1. getUserHandle : replaced return value with null for com/yubico/webauthn/AssertionResult::getUserHandle → KILLED
+ +
+
+
    return credential.getUserHandle();
+ +147 + + + + + + +
  }
+ +148 + + + + + + +
+ +149 + + + + + + +
  /**
+ +150 + + + + + + +
   * Check whether the <a href="https://www.w3.org/TR/webauthn/#user-verification">user
+ +151 + + + + + + +
   * verification</a> as performed during the authentication ceremony.
+ +152 + + + + + + +
   *
+ +153 + + + + + + +
   * <p>This flag is also available via <code>
+ +154 + + + + + + +
   * {@link PublicKeyCredential}.{@link PublicKeyCredential#getResponse() getResponse()}.{@link AuthenticatorResponse#getParsedAuthenticatorData() getParsedAuthenticatorData()}.{@link AuthenticatorData#getFlags() getFlags()}.{@link AuthenticatorDataFlags#UV UV}
+ +155 + + + + + + +
   * </code>.
+ +156 + + + + + + +
   *
+ +157 + + + + + + +
   * @return <code>true</code> if and only if the authenticator claims to have performed user
+ +158 + + + + + + +
   *     verification during the authentication ceremony.
+ +159 + + + + + + +
   * @see <a href="https://www.w3.org/TR/webauthn/#user-verification">User Verification</a>
+ +160 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-uv">UV flag in §6.1. Authenticator
+ +161 + + + + + + +
   *     Data</a>
+ +162 + + + + + + +
   */
+ +163 + + + + + + +
  @JsonIgnore
+ +164 + + + + + + +
  public boolean isUserVerified() {
+ +165 + + +2 + +1. isUserVerified : replaced boolean return with false for com/yubico/webauthn/AssertionResult::isUserVerified → KILLED
+2. isUserVerified : replaced boolean return with true for com/yubico/webauthn/AssertionResult::isUserVerified → KILLED
+ +
+
+
    return credentialResponse.getResponse().getParsedAuthenticatorData().getFlags().UV;
+ +166 + + + + + + +
  }
+ +167 + + + + + + +
+ +168 + + + + + + +
  /**
+ +169 + + + + + + +
   * Check whether the asserted credential is <a
+ +170 + + + + + + +
   * href="https://w3c.github.io/webauthn/#backup-eligible">backup eligible</a>, using the <a
+ +171 + + + + + + +
   * href="https://w3c.github.io/webauthn/#authdata-flags-be">BE flag</a> in the authenticator data.
+ +172 + + + + + + +
   *
+ +173 + + + + + + +
   * <p>You SHOULD store this value in your representation of the corresponding {@link
+ +174 + + + + + + +
   * RegisteredCredential} if no value is stored yet. {@link CredentialRepository} implementations
+ +175 + + + + + + +
   * SHOULD set this value as the {@link
+ +176 + + + + + + +
   * RegisteredCredential.RegisteredCredentialBuilder#backupEligible(Boolean)
+ +177 + + + + + + +
   * backupEligible(Boolean)} value when reconstructing that {@link RegisteredCredential}.
+ +178 + + + + + + +
   *
+ +179 + + + + + + +
   * @return <code>true</code> if and only if the created credential is backup eligible. NOTE that
+ +180 + + + + + + +
   *     this is only a hint and not a guarantee, unless backed by a trusted authenticator
+ +181 + + + + + + +
   *     attestation.
+ +182 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#backup-eligible">Backup Eligible in §4.
+ +183 + + + + + + +
   *     Terminology</a>
+ +184 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-be">BE flag in §6.1. Authenticator
+ +185 + + + + + + +
   *     Data</a>
+ +186 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +187 + + + + + + +
   *     the standard matures.
+ +188 + + + + + + +
   */
+ +189 + + + + + + +
  @Deprecated
+ +190 + + + + + + +
  @JsonIgnore
+ +191 + + + + + + +
  public boolean isBackupEligible() {
+ +192 + + +2 + +1. isBackupEligible : replaced boolean return with true for com/yubico/webauthn/AssertionResult::isBackupEligible → KILLED
+2. isBackupEligible : replaced boolean return with false for com/yubico/webauthn/AssertionResult::isBackupEligible → KILLED
+ +
+
+
    return credentialResponse.getResponse().getParsedAuthenticatorData().getFlags().BE;
+ +193 + + + + + + +
  }
+ +194 + + + + + + +
+ +195 + + + + + + +
  /**
+ +196 + + + + + + +
   * Get the current <a href="https://w3c.github.io/webauthn/#backup-state">backup state</a> of the
+ +197 + + + + + + +
   * asserted credential, using the <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">BS
+ +198 + + + + + + +
   * flag</a> in the authenticator data.
+ +199 + + + + + + +
   *
+ +200 + + + + + + +
   * <p>You SHOULD update this value in your representation of a {@link RegisteredCredential}.
+ +201 + + + + + + +
   * {@link CredentialRepository} implementations SHOULD set this value as the {@link
+ +202 + + + + + + +
   * RegisteredCredential.RegisteredCredentialBuilder#backupState(Boolean) backupState(Boolean)}
+ +203 + + + + + + +
   * value when reconstructing that {@link RegisteredCredential}.
+ +204 + + + + + + +
   *
+ +205 + + + + + + +
   * @return <code>true</code> if and only if the created credential is believed to currently be
+ +206 + + + + + + +
   *     backed up. NOTE that this is only a hint and not a guarantee, unless backed by a trusted
+ +207 + + + + + + +
   *     authenticator attestation.
+ +208 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#backup-state">Backup State in §4. Terminology</a>
+ +209 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">BS flag in §6.1. Authenticator
+ +210 + + + + + + +
   *     Data</a>
+ +211 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +212 + + + + + + +
   *     the standard matures.
+ +213 + + + + + + +
   */
+ +214 + + + + + + +
  @Deprecated
+ +215 + + + + + + +
  @JsonIgnore
+ +216 + + + + + + +
  public boolean isBackedUp() {
+ +217 + + +2 + +1. isBackedUp : replaced boolean return with false for com/yubico/webauthn/AssertionResult::isBackedUp → KILLED
+2. isBackedUp : replaced boolean return with true for com/yubico/webauthn/AssertionResult::isBackedUp → KILLED
+ +
+
+
    return credentialResponse.getResponse().getParsedAuthenticatorData().getFlags().BS;
+ +218 + + + + + + +
  }
+ +219 + + + + + + +
+ +220 + + + + + + +
  /**
+ +221 + + + + + + +
   * The <a href="https://w3c.github.io/webauthn/#authenticator-attachment-modality">authenticator
+ +222 + + + + + + +
   * attachment modality</a> in effect at the time the asserted credential was used.
+ +223 + + + + + + +
   *
+ +224 + + + + + + +
   * @see PublicKeyCredential#getAuthenticatorAttachment()
+ +225 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +226 + + + + + + +
   *     the standard matures.
+ +227 + + + + + + +
   */
+ +228 + + + + + + +
  @Deprecated
+ +229 + + + + + + +
  @JsonIgnore
+ +230 + + + + + + +
  public Optional<AuthenticatorAttachment> getAuthenticatorAttachment() {
+ +231 + + +1 + +1. getAuthenticatorAttachment : replaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getAuthenticatorAttachment → KILLED
+ +
+
+
    return credentialResponse.getAuthenticatorAttachment();
+ +232 + + + + + + +
  }
+ +233 + + + + + + +
+ +234 + + + + + + +
  /**
+ +235 + + + + + + +
   * The new <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#signcount">signature
+ +236 + + + + + + +
   * count</a> of the credential used for the assertion.
+ +237 + + + + + + +
   *
+ +238 + + + + + + +
   * <p>You should update this value in your database.
+ +239 + + + + + + +
   *
+ +240 + + + + + + +
   * @see AuthenticatorData#getSignatureCounter()
+ +241 + + + + + + +
   */
+ +242 + + + + + + +
  @JsonIgnore
+ +243 + + + + + + +
  public long getSignatureCount() {
+ +244 + + +1 + +1. getSignatureCount : replaced long return with 0 for com/yubico/webauthn/AssertionResult::getSignatureCount → KILLED
+ +
+
+
    return credentialResponse.getResponse().getParsedAuthenticatorData().getSignatureCounter();
+ +245 + + + + + + +
  }
+ +246 + + + + + + +
+ +247 + + + + + + +
  /**
+ +248 + + + + + + +
   * The <a
+ +249 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-extension-output">client
+ +250 + + + + + + +
   * extension outputs</a>, if any.
+ +251 + + + + + + +
   *
+ +252 + + + + + + +
   * <p>This is present if and only if at least one extension output is present in the return value.
+ +253 + + + + + + +
   *
+ +254 + + + + + + +
   * @see <a
+ +255 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-client-extension-processing">§9.4.
+ +256 + + + + + + +
   *     Client Extension Processing</a>
+ +257 + + + + + + +
   * @see ClientAssertionExtensionOutputs
+ +258 + + + + + + +
   * @see #getAuthenticatorExtensionOutputs() ()
+ +259 + + + + + + +
   */
+ +260 + + + + + + +
  @JsonIgnore
+ +261 + + + + + + +
  public Optional<ClientAssertionExtensionOutputs> getClientExtensionOutputs() {
+ +262 + + +1 + +1. getClientExtensionOutputs : replaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getClientExtensionOutputs → KILLED
+ +
+
+
    return Optional.of(credentialResponse.getClientExtensionResults())
+ +263 + + +2 + +1. lambda$getClientExtensionOutputs$0 : replaced boolean return with true for com/yubico/webauthn/AssertionResult::lambda$getClientExtensionOutputs$0 → SURVIVED
+2. lambda$getClientExtensionOutputs$0 : negated conditional → KILLED
+ +
+
+
        .filter(ceo -> !ceo.getExtensionIds().isEmpty());
+ +264 + + + + + + +
  }
+ +265 + + + + + + +
+ +266 + + + + + + +
  /**
+ +267 + + + + + + +
   * The <a
+ +268 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">authenticator
+ +269 + + + + + + +
   * extension outputs</a>, if any.
+ +270 + + + + + + +
   *
+ +271 + + + + + + +
   * <p>This is present if and only if at least one extension output is present in the return value.
+ +272 + + + + + + +
   *
+ +273 + + + + + + +
   * @see <a
+ +274 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-extension-processing">§9.5.
+ +275 + + + + + + +
   *     Authenticator Extension Processing</a>
+ +276 + + + + + + +
   * @see AuthenticatorAssertionExtensionOutputs
+ +277 + + + + + + +
   * @see #getClientExtensionOutputs()
+ +278 + + + + + + +
   */
+ +279 + + + + + + +
  @JsonIgnore
+ +280 + + + + + + +
  public Optional<AuthenticatorAssertionExtensionOutputs> getAuthenticatorExtensionOutputs() {
+ +281 + + +1 + +1. getAuthenticatorExtensionOutputs : replaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getAuthenticatorExtensionOutputs → KILLED
+ +
+
+
    return AuthenticatorAssertionExtensionOutputs.fromAuthenticatorData(
+ +282 + + + + + + +
        credentialResponse.getResponse().getParsedAuthenticatorData());
+ +283 + + + + + + +
  }
+ +284 + + + + + + +
}

Mutations

104 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
107 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
108 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
130 + + + +

1.1
Location : getCredentialId
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced return value with null for com/yubico/webauthn/AssertionResult::getCredentialId → KILLED

+
146 + + + +

1.1
Location : getUserHandle
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced return value with null for com/yubico/webauthn/AssertionResult::getUserHandle → KILLED

+
165 + + + +

1.1
Location : isUserVerified
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced boolean return with false for com/yubico/webauthn/AssertionResult::isUserVerified → KILLED

2.2
Location : isUserVerified
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced boolean return with true for com/yubico/webauthn/AssertionResult::isUserVerified → KILLED

+
192 + + + +

1.1
Location : isBackupEligible
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced boolean return with true for com/yubico/webauthn/AssertionResult::isBackupEligible → KILLED

2.2
Location : isBackupEligible
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced boolean return with false for com/yubico/webauthn/AssertionResult::isBackupEligible → KILLED

+
217 + + + +

1.1
Location : isBackedUp
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced boolean return with false for com/yubico/webauthn/AssertionResult::isBackedUp → KILLED

2.2
Location : isBackedUp
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced boolean return with true for com/yubico/webauthn/AssertionResult::isBackedUp → KILLED

+
231 + + + +

1.1
Location : getAuthenticatorAttachment
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getAuthenticatorAttachment → KILLED

+
244 + + + +

1.1
Location : getSignatureCount
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced long return with 0 for com/yubico/webauthn/AssertionResult::getSignatureCount → KILLED

+
262 + + + +

1.1
Location : getClientExtensionOutputs
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getClientExtensionOutputs → KILLED

+
263 + + + +

1.1
Location : lambda$getClientExtensionOutputs$0
Killed by : none
replaced boolean return with true for com/yubico/webauthn/AssertionResult::lambda$getClientExtensionOutputs$0 → SURVIVED

2.2
Location : lambda$getClientExtensionOutputs$0
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
negated conditional → KILLED

+
281 + + + +

1.1
Location : getAuthenticatorExtensionOutputs
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getAuthenticatorExtensionOutputs → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionResultV2.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionResultV2.java.html new file mode 100644 index 000000000..97f481453 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/AssertionResultV2.java.html @@ -0,0 +1,3863 @@ + + + + + + + + + +

AssertionResultV2.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnore;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +30 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs;
+ +31 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAssertionResponse;
+ +32 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAttachment;
+ +33 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorData;
+ +34 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorDataFlags;
+ +35 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorResponse;
+ +36 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +37 + + + + + + +
import com.yubico.webauthn.data.ClientAssertionExtensionOutputs;
+ +38 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredential;
+ +39 + + + + + + +
import java.util.Optional;
+ +40 + + + + + + +
import lombok.AccessLevel;
+ +41 + + + + + + +
import lombok.Getter;
+ +42 + + + + + + +
import lombok.NonNull;
+ +43 + + + + + + +
import lombok.Value;
+ +44 + + + + + + +
+ +45 + + + + + + +
/**
+ +46 + + + + + + +
 * The result of a call to {@link RelyingPartyV2#finishAssertion(FinishAssertionOptions)}.
+ +47 + + + + + + +
 *
+ +48 + + + + + + +
 * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +49 + + + + + + +
 *     before reaching a mature release.
+ +50 + + + + + + +
 */
+ +51 + + + + + + +
@Deprecated
+ +52 + + + + + + +
@Value
+ +53 + + + + + + +
public class AssertionResultV2<C extends CredentialRecord> {
+ +54 + + + + + + +
+ +55 + + + + + + +
  /** <code>true</code> if the assertion was verified successfully. */
+ +56 + + + + + + +
  private final boolean success;
+ +57 + + + + + + +
+ +58 + + + + + + +
  @JsonProperty
+ +59 + + + + + + +
  @Getter(AccessLevel.NONE)
+ +60 + + + + + + +
  private final PublicKeyCredential<AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs>
+ +61 + + + + + + +
      credentialResponse;
+ +62 + + + + + + +
+ +63 + + + + + + +
  /**
+ +64 + + + + + + +
   * The {@link CredentialRecord} that was returned by {@link
+ +65 + + + + + + +
   * CredentialRepositoryV2#lookup(ByteArray, ByteArray)} and whose public key was used to
+ +66 + + + + + + +
   * successfully verify the assertion signature.
+ +67 + + + + + + +
   *
+ +68 + + + + + + +
   * <p>NOTE: The {@link CredentialRecord#getSignatureCount() signature count}, {@link
+ +69 + + + + + + +
   * CredentialRecord#isBackupEligible() backup eligibility} and {@link
+ +70 + + + + + + +
   * CredentialRecord#isBackedUp() backup state} properties in this object will reflect the state
+ +71 + + + + + + +
   * <i>before</i> the assertion operation, not the new state. When updating your database state,
+ +72 + + + + + + +
   * use the signature counter and backup state from {@link #getSignatureCount()}, {@link
+ +73 + + + + + + +
   * #isBackupEligible()} and {@link #isBackedUp()} instead.
+ +74 + + + + + + +
   *
+ +75 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +76 + + + + + + +
   *     before reaching a mature release.
+ +77 + + + + + + +
   */
+ +78 + + + + + + +
  @Deprecated private final C credential;
+ +79 + + + + + + +
+ +80 + + + + + + +
  /**
+ +81 + + + + + + +
   * <code>true</code> if and only if at least one of the following is true:
+ +82 + + + + + + +
   *
+ +83 + + + + + + +
   * <ul>
+ +84 + + + + + + +
   *   <li>The {@link AuthenticatorData#getSignatureCounter() signature counter value} in the
+ +85 + + + + + + +
   *       assertion was strictly greater than {@link CredentialRecord#getSignatureCount() the
+ +86 + + + + + + +
   *       stored one}.
+ +87 + + + + + + +
   *   <li>The {@link AuthenticatorData#getSignatureCounter() signature counter value} in the
+ +88 + + + + + + +
   *       assertion and {@link CredentialRecord#getSignatureCount() the stored one} were both zero.
+ +89 + + + + + + +
   * </ul>
+ +90 + + + + + + +
   *
+ +91 + + + + + + +
   * @see <a
+ +92 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-data">§6.1.
+ +93 + + + + + + +
   *     Authenticator Data</a>
+ +94 + + + + + + +
   * @see AuthenticatorData#getSignatureCounter()
+ +95 + + + + + + +
   * @see CredentialRecord#getSignatureCount()
+ +96 + + + + + + +
   * @see RelyingParty.RelyingPartyBuilder#validateSignatureCounter(boolean)
+ +97 + + + + + + +
   */
+ +98 + + + + + + +
  private final boolean signatureCounterValid;
+ +99 + + + + + + +
+ +100 + + + + + + +
  @JsonCreator
+ +101 + + + + + + +
  AssertionResultV2(
+ +102 + + + + + + +
      @JsonProperty("success") boolean success,
+ +103 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("credentialResponse")
+ +104 + + + + + + +
          PublicKeyCredential<AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs>
+ +105 + + + + + + +
              credentialResponse,
+ +106 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("credential") C credential,
+ +107 + + + + + + +
      @JsonProperty("signatureCounterValid") boolean signatureCounterValid) {
+ +108 + + + + + + +
    this.success = success;
+ +109 + + + + + + +
    this.credentialResponse = credentialResponse;
+ +110 + + + + + + +
    this.credential = credential;
+ +111 + + + + + + +
    this.signatureCounterValid = signatureCounterValid;
+ +112 + + + + + + +
  }
+ +113 + + + + + + +
+ +114 + + + + + + +
  /**
+ +115 + + + + + + +
   * Check whether the <a href="https://www.w3.org/TR/webauthn/#user-verification">user
+ +116 + + + + + + +
   * verification</a> as performed during the authentication ceremony.
+ +117 + + + + + + +
   *
+ +118 + + + + + + +
   * <p>This flag is also available via <code>
+ +119 + + + + + + +
   * {@link PublicKeyCredential}.{@link PublicKeyCredential#getResponse() getResponse()}.{@link AuthenticatorResponse#getParsedAuthenticatorData() getParsedAuthenticatorData()}.{@link AuthenticatorData#getFlags() getFlags()}.{@link AuthenticatorDataFlags#UV UV}
+ +120 + + + + + + +
   * </code>.
+ +121 + + + + + + +
   *
+ +122 + + + + + + +
   * @return <code>true</code> if and only if the authenticator claims to have performed user
+ +123 + + + + + + +
   *     verification during the authentication ceremony.
+ +124 + + + + + + +
   * @see <a href="https://www.w3.org/TR/webauthn/#user-verification">User Verification</a>
+ +125 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-uv">UV flag in §6.1. Authenticator
+ +126 + + + + + + +
   *     Data</a>
+ +127 + + + + + + +
   */
+ +128 + + + + + + +
  @JsonIgnore
+ +129 + + + + + + +
  public boolean isUserVerified() {
+ +130 + + +2 + +1. isUserVerified : replaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isUserVerified → KILLED
+2. isUserVerified : replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isUserVerified → KILLED
+ +
+
+
    return credentialResponse.getResponse().getParsedAuthenticatorData().getFlags().UV;
+ +131 + + + + + + +
  }
+ +132 + + + + + + +
+ +133 + + + + + + +
  /**
+ +134 + + + + + + +
   * Check whether the asserted credential is <a
+ +135 + + + + + + +
   * href="https://w3c.github.io/webauthn/#backup-eligible">backup eligible</a>, using the <a
+ +136 + + + + + + +
   * href="https://w3c.github.io/webauthn/#authdata-flags-be">BE flag</a> in the authenticator data.
+ +137 + + + + + + +
   *
+ +138 + + + + + + +
   * <p>You SHOULD store this value in your representation of the corresponding {@link
+ +139 + + + + + + +
   * CredentialRecord} if no value is stored yet. {@link CredentialRepository} implementations
+ +140 + + + + + + +
   * SHOULD set this value when reconstructing that {@link CredentialRecord}.
+ +141 + + + + + + +
   *
+ +142 + + + + + + +
   * @return <code>true</code> if and only if the created credential is backup eligible. NOTE that
+ +143 + + + + + + +
   *     this is only a hint and not a guarantee, unless backed by a trusted authenticator
+ +144 + + + + + + +
   *     attestation.
+ +145 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#backup-eligible">Backup Eligible in §4.
+ +146 + + + + + + +
   *     Terminology</a>
+ +147 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-be">BE flag in §6.1. Authenticator
+ +148 + + + + + + +
   *     Data</a>
+ +149 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +150 + + + + + + +
   *     the standard matures.
+ +151 + + + + + + +
   */
+ +152 + + + + + + +
  @Deprecated
+ +153 + + + + + + +
  @JsonIgnore
+ +154 + + + + + + +
  public boolean isBackupEligible() {
+ +155 + + +2 + +1. isBackupEligible : replaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isBackupEligible → KILLED
+2. isBackupEligible : replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isBackupEligible → KILLED
+ +
+
+
    return credentialResponse.getResponse().getParsedAuthenticatorData().getFlags().BE;
+ +156 + + + + + + +
  }
+ +157 + + + + + + +
+ +158 + + + + + + +
  /**
+ +159 + + + + + + +
   * Get the current <a href="https://w3c.github.io/webauthn/#backup-state">backup state</a> of the
+ +160 + + + + + + +
   * asserted credential, using the <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">BS
+ +161 + + + + + + +
   * flag</a> in the authenticator data.
+ +162 + + + + + + +
   *
+ +163 + + + + + + +
   * <p>You SHOULD update this value in your representation of a {@link CredentialRecord}. {@link
+ +164 + + + + + + +
   * CredentialRepository} implementations SHOULD set this value when reconstructing that {@link
+ +165 + + + + + + +
   * CredentialRecord}.
+ +166 + + + + + + +
   *
+ +167 + + + + + + +
   * @return <code>true</code> if and only if the created credential is believed to currently be
+ +168 + + + + + + +
   *     backed up. NOTE that this is only a hint and not a guarantee, unless backed by a trusted
+ +169 + + + + + + +
   *     authenticator attestation.
+ +170 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#backup-state">Backup State in §4. Terminology</a>
+ +171 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">BS flag in §6.1. Authenticator
+ +172 + + + + + + +
   *     Data</a>
+ +173 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +174 + + + + + + +
   *     the standard matures.
+ +175 + + + + + + +
   */
+ +176 + + + + + + +
  @Deprecated
+ +177 + + + + + + +
  @JsonIgnore
+ +178 + + + + + + +
  public boolean isBackedUp() {
+ +179 + + +2 + +1. isBackedUp : replaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isBackedUp → KILLED
+2. isBackedUp : replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isBackedUp → KILLED
+ +
+
+
    return credentialResponse.getResponse().getParsedAuthenticatorData().getFlags().BS;
+ +180 + + + + + + +
  }
+ +181 + + + + + + +
+ +182 + + + + + + +
  /**
+ +183 + + + + + + +
   * The <a href="https://w3c.github.io/webauthn/#authenticator-attachment-modality">authenticator
+ +184 + + + + + + +
   * attachment modality</a> in effect at the time the asserted credential was used.
+ +185 + + + + + + +
   *
+ +186 + + + + + + +
   * @see PublicKeyCredential#getAuthenticatorAttachment()
+ +187 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +188 + + + + + + +
   *     the standard matures.
+ +189 + + + + + + +
   */
+ +190 + + + + + + +
  @Deprecated
+ +191 + + + + + + +
  @JsonIgnore
+ +192 + + + + + + +
  public Optional<AuthenticatorAttachment> getAuthenticatorAttachment() {
+ +193 + + +1 + +1. getAuthenticatorAttachment : replaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getAuthenticatorAttachment → KILLED
+ +
+
+
    return credentialResponse.getAuthenticatorAttachment();
+ +194 + + + + + + +
  }
+ +195 + + + + + + +
+ +196 + + + + + + +
  /**
+ +197 + + + + + + +
   * The new <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#signcount">signature
+ +198 + + + + + + +
   * count</a> of the credential used for the assertion.
+ +199 + + + + + + +
   *
+ +200 + + + + + + +
   * <p>You should update this value in your database.
+ +201 + + + + + + +
   *
+ +202 + + + + + + +
   * @see AuthenticatorData#getSignatureCounter()
+ +203 + + + + + + +
   */
+ +204 + + + + + + +
  @JsonIgnore
+ +205 + + + + + + +
  public long getSignatureCount() {
+ +206 + + +1 + +1. getSignatureCount : replaced long return with 0 for com/yubico/webauthn/AssertionResultV2::getSignatureCount → KILLED
+ +
+
+
    return credentialResponse.getResponse().getParsedAuthenticatorData().getSignatureCounter();
+ +207 + + + + + + +
  }
+ +208 + + + + + + +
+ +209 + + + + + + +
  /**
+ +210 + + + + + + +
   * The <a
+ +211 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-extension-output">client
+ +212 + + + + + + +
   * extension outputs</a>, if any.
+ +213 + + + + + + +
   *
+ +214 + + + + + + +
   * <p>This is present if and only if at least one extension output is present in the return value.
+ +215 + + + + + + +
   *
+ +216 + + + + + + +
   * @see <a
+ +217 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-client-extension-processing">§9.4.
+ +218 + + + + + + +
   *     Client Extension Processing</a>
+ +219 + + + + + + +
   * @see ClientAssertionExtensionOutputs
+ +220 + + + + + + +
   * @see #getAuthenticatorExtensionOutputs() ()
+ +221 + + + + + + +
   */
+ +222 + + + + + + +
  @JsonIgnore
+ +223 + + + + + + +
  public Optional<ClientAssertionExtensionOutputs> getClientExtensionOutputs() {
+ +224 + + +1 + +1. getClientExtensionOutputs : replaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getClientExtensionOutputs → KILLED
+ +
+
+
    return Optional.of(credentialResponse.getClientExtensionResults())
+ +225 + + +2 + +1. lambda$getClientExtensionOutputs$0 : replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::lambda$getClientExtensionOutputs$0 → SURVIVED
+2. lambda$getClientExtensionOutputs$0 : negated conditional → KILLED
+ +
+
+
        .filter(ceo -> !ceo.getExtensionIds().isEmpty());
+ +226 + + + + + + +
  }
+ +227 + + + + + + +
+ +228 + + + + + + +
  /**
+ +229 + + + + + + +
   * The <a
+ +230 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">authenticator
+ +231 + + + + + + +
   * extension outputs</a>, if any.
+ +232 + + + + + + +
   *
+ +233 + + + + + + +
   * <p>This is present if and only if at least one extension output is present in the return value.
+ +234 + + + + + + +
   *
+ +235 + + + + + + +
   * @see <a
+ +236 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-extension-processing">§9.5.
+ +237 + + + + + + +
   *     Authenticator Extension Processing</a>
+ +238 + + + + + + +
   * @see AuthenticatorAssertionExtensionOutputs
+ +239 + + + + + + +
   * @see #getClientExtensionOutputs()
+ +240 + + + + + + +
   */
+ +241 + + + + + + +
  @JsonIgnore
+ +242 + + + + + + +
  public Optional<AuthenticatorAssertionExtensionOutputs> getAuthenticatorExtensionOutputs() {
+ +243 + + +1 + +1. getAuthenticatorExtensionOutputs : replaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getAuthenticatorExtensionOutputs → KILLED
+ +
+
+
    return AuthenticatorAssertionExtensionOutputs.fromAuthenticatorData(
+ +244 + + + + + + +
        credentialResponse.getResponse().getParsedAuthenticatorData());
+ +245 + + + + + + +
  }
+ +246 + + + + + + +
}

Mutations

103 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
106 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
130 + + + +

1.1
Location : isUserVerified
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isUserVerified → KILLED

2.2
Location : isUserVerified
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isUserVerified → KILLED

+
155 + + + +

1.1
Location : isBackupEligible
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isBackupEligible → KILLED

2.2
Location : isBackupEligible
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isBackupEligible → KILLED

+
179 + + + +

1.1
Location : isBackedUp
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isBackedUp → KILLED

2.2
Location : isBackedUp
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isBackedUp → KILLED

+
193 + + + +

1.1
Location : getAuthenticatorAttachment
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getAuthenticatorAttachment → KILLED

+
206 + + + +

1.1
Location : getSignatureCount
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced long return with 0 for com/yubico/webauthn/AssertionResultV2::getSignatureCount → KILLED

+
224 + + + +

1.1
Location : getClientExtensionOutputs
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getClientExtensionOutputs → KILLED

+
225 + + + +

1.1
Location : lambda$getClientExtensionOutputs$0
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

2.2
Location : lambda$getClientExtensionOutputs$0
Killed by : none
replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::lambda$getClientExtensionOutputs$0 → SURVIVED

+
243 + + + +

1.1
Location : getAuthenticatorExtensionOutputs
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getAuthenticatorExtensionOutputs → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/CredentialRecord.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/CredentialRecord.java.html new file mode 100644 index 000000000..cc17f327a --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/CredentialRecord.java.html @@ -0,0 +1,3448 @@ + + + + + + + + + +

CredentialRecord.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.webauthn;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.yubico.webauthn.data.AttestedCredentialData;
+ +4 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAssertionResponse;
+ +5 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAttestationResponse;
+ +6 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorData;
+ +7 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorTransport;
+ +8 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +9 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions;
+ +10 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialDescriptor;
+ +11 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialRequestOptions;
+ +12 + + + + + + +
import com.yubico.webauthn.data.UserIdentity;
+ +13 + + + + + + +
import java.util.Optional;
+ +14 + + + + + + +
import java.util.Set;
+ +15 + + + + + + +
import lombok.NonNull;
+ +16 + + + + + + +
+ +17 + + + + + + +
/**
+ +18 + + + + + + +
 * An abstraction of properties of a stored WebAuthn credential.
+ +19 + + + + + + +
 *
+ +20 + + + + + + +
 * @see <a href="https://w3c.github.io/webauthn/#credential-record">Credential Record</a> in Web
+ +21 + + + + + + +
 *     Authentication Level 3 (Editor's Draft)
+ +22 + + + + + + +
 * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +23 + + + + + + +
 *     before reaching a mature release.
+ +24 + + + + + + +
 */
+ +25 + + + + + + +
@Deprecated
+ +26 + + + + + + +
public interface CredentialRecord extends ToPublicKeyCredentialDescriptor {
+ +27 + + + + + + +
+ +28 + + + + + + +
  /**
+ +29 + + + + + + +
   * The <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#credential-id">credential
+ +30 + + + + + + +
   * ID</a> of the credential.
+ +31 + + + + + + +
   *
+ +32 + + + + + + +
   * <p>Implementations MUST NOT return null.
+ +33 + + + + + + +
   *
+ +34 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#credential-id">Credential
+ +35 + + + + + + +
   *     ID</a>
+ +36 + + + + + + +
   * @see RegistrationResult#getKeyId()
+ +37 + + + + + + +
   * @see PublicKeyCredentialDescriptor#getId()
+ +38 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +39 + + + + + + +
   *     before reaching a mature release.
+ +40 + + + + + + +
   */
+ +41 + + + + + + +
  @Deprecated
+ +42 + + + + + + +
  @NonNull
+ +43 + + + + + + +
  ByteArray getCredentialId();
+ +44 + + + + + + +
+ +45 + + + + + + +
  /**
+ +46 + + + + + + +
   * The <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-handle">user handle</a>
+ +47 + + + + + + +
   * of the user the credential is registered to.
+ +48 + + + + + + +
   *
+ +49 + + + + + + +
   * <p>Implementations MUST NOT return null.
+ +50 + + + + + + +
   *
+ +51 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-handle">User Handle</a>
+ +52 + + + + + + +
   * @see UserIdentity#getId()
+ +53 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +54 + + + + + + +
   *     before reaching a mature release.
+ +55 + + + + + + +
   */
+ +56 + + + + + + +
  @Deprecated
+ +57 + + + + + + +
  @NonNull
+ +58 + + + + + + +
  ByteArray getUserHandle();
+ +59 + + + + + + +
+ +60 + + + + + + +
  /**
+ +61 + + + + + + +
   * The credential public key encoded in COSE_Key format, as defined in Section 7 of <a
+ +62 + + + + + + +
   * href="https://tools.ietf.org/html/rfc8152">RFC 8152</a>.
+ +63 + + + + + + +
   *
+ +64 + + + + + + +
   * <p>This is used to verify the {@link AuthenticatorAssertionResponse#getSignature() signature}
+ +65 + + + + + + +
   * in authentication assertions.
+ +66 + + + + + + +
   *
+ +67 + + + + + + +
   * <p>If your database has credentials encoded in U2F (raw) format, you may need to use {@link
+ +68 + + + + + + +
   * #cosePublicKeyFromEs256Raw(ByteArray)} to convert them before returning them in this method.
+ +69 + + + + + + +
   *
+ +70 + + + + + + +
   * <p>Implementations MUST NOT return null.
+ +71 + + + + + + +
   *
+ +72 + + + + + + +
   * @see AttestedCredentialData#getCredentialPublicKey()
+ +73 + + + + + + +
   * @see RegistrationResult#getPublicKeyCose()
+ +74 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +75 + + + + + + +
   *     before reaching a mature release.
+ +76 + + + + + + +
   */
+ +77 + + + + + + +
  @Deprecated
+ +78 + + + + + + +
  @NonNull
+ +79 + + + + + + +
  ByteArray getPublicKeyCose();
+ +80 + + + + + + +
+ +81 + + + + + + +
  /**
+ +82 + + + + + + +
   * The stored <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#signcount">signature
+ +83 + + + + + + +
   * count</a> of the credential.
+ +84 + + + + + + +
   *
+ +85 + + + + + + +
   * <p>This is used to validate the {@link AuthenticatorData#getSignatureCounter() signature
+ +86 + + + + + + +
   * counter} in authentication assertions.
+ +87 + + + + + + +
   *
+ +88 + + + + + + +
   * @see <a
+ +89 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-data">§6.1.
+ +90 + + + + + + +
   *     Authenticator Data</a>
+ +91 + + + + + + +
   * @see AuthenticatorData#getSignatureCounter()
+ +92 + + + + + + +
   * @see AssertionResult#getSignatureCount()
+ +93 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +94 + + + + + + +
   *     before reaching a mature release.
+ +95 + + + + + + +
   */
+ +96 + + + + + + +
  @Deprecated
+ +97 + + + + + + +
  long getSignatureCount();
+ +98 + + + + + + +
+ +99 + + + + + + +
  /**
+ +100 + + + + + + +
   * Transport hints as to how the client might communicate with the authenticator this credential
+ +101 + + + + + + +
   * is bound to.
+ +102 + + + + + + +
   *
+ +103 + + + + + + +
   * <p>Implementations SHOULD return the value returned by {@link
+ +104 + + + + + + +
   * AuthenticatorAttestationResponse#getTransports()} when the credential was created. That value
+ +105 + + + + + + +
   * SHOULD NOT be modified.
+ +106 + + + + + + +
   *
+ +107 + + + + + + +
   * <p>Implementations MUST NOT return null.
+ +108 + + + + + + +
   *
+ +109 + + + + + + +
   * <p>This is used to set {@link PublicKeyCredentialDescriptor#getTransports()} in {@link
+ +110 + + + + + + +
   * PublicKeyCredentialCreationOptions#getExcludeCredentials() excludeCredentials} in {@link
+ +111 + + + + + + +
   * RelyingParty#startRegistration(StartRegistrationOptions)} and and {@link
+ +112 + + + + + + +
   * PublicKeyCredentialRequestOptions#getAllowCredentials() allowCredentials} in {@link
+ +113 + + + + + + +
   * RelyingParty#startAssertion(StartAssertionOptions)}.
+ +114 + + + + + + +
   *
+ +115 + + + + + + +
   * @see <a
+ +116 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticatorattestationresponse-gettransports">getTransports()
+ +117 + + + + + + +
   *     in 5.2.1. Information About Public Key Credential (interface
+ +118 + + + + + + +
   *     AuthenticatorAttestationResponse)</a>
+ +119 + + + + + + +
   * @see <a
+ +120 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-publickeycredentialdescriptor-transports">transports
+ +121 + + + + + + +
   *     in 5.8.3. Credential Descriptor (dictionary PublicKeyCredentialDescriptor)</a>
+ +122 + + + + + + +
   * @see AuthenticatorAttestationResponse#getTransports()
+ +123 + + + + + + +
   * @see PublicKeyCredentialDescriptor#getTransports()
+ +124 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +125 + + + + + + +
   *     before reaching a mature release.
+ +126 + + + + + + +
   */
+ +127 + + + + + + +
  @Deprecated
+ +128 + + + + + + +
  Optional<Set<AuthenticatorTransport>> getTransports();
+ +129 + + + + + + +
+ +130 + + + + + + +
  // boolean isUvInitialized();
+ +131 + + + + + + +
+ +132 + + + + + + +
  /**
+ +133 + + + + + + +
   * The state of the <a href="https://w3c.github.io/webauthn/#authdata-flags-be">BE flag</a> when
+ +134 + + + + + + +
   * this credential was registered, if known.
+ +135 + + + + + + +
   *
+ +136 + + + + + + +
   * <p>If absent, it is not known whether or not this credential is backup eligible.
+ +137 + + + + + + +
   *
+ +138 + + + + + + +
   * <p>If present and <code>true</code>, the credential is backup eligible: it can be backed up in
+ +139 + + + + + + +
   * some way, most commonly by syncing the private key to a cloud account.
+ +140 + + + + + + +
   *
+ +141 + + + + + + +
   * <p>If present and <code>false</code>, the credential is not backup eligible: it cannot be
+ +142 + + + + + + +
   * backed up in any way.
+ +143 + + + + + + +
   *
+ +144 + + + + + + +
   * <p>{@link CredentialRecord} implementations SHOULD return the first known value returned by
+ +145 + + + + + + +
   * {@link RegistrationResult#isBackupEligible()} or {@link AssertionResult#isBackupEligible()}, if
+ +146 + + + + + + +
   * known. If unknown, {@link CredentialRecord} implementations SHOULD return <code>
+ +147 + + + + + + +
   * Optional.empty()</code>.
+ +148 + + + + + + +
   *
+ +149 + + + + + + +
   * <p>Implementations MUST NOT return null.
+ +150 + + + + + + +
   *
+ +151 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +152 + + + + + + +
   *     before reaching a mature release. EXPERIMENTAL: This feature is from a not yet mature
+ +153 + + + + + + +
   *     standard; it could change as the standard matures.
+ +154 + + + + + + +
   */
+ +155 + + + + + + +
  @Deprecated
+ +156 + + + + + + +
  Optional<Boolean> isBackupEligible();
+ +157 + + + + + + +
+ +158 + + + + + + +
  /**
+ +159 + + + + + + +
   * The last known state of the <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">BS
+ +160 + + + + + + +
   * flag</a> for this credential, if known.
+ +161 + + + + + + +
   *
+ +162 + + + + + + +
   * <p>If absent, the backup state of the credential is not known.
+ +163 + + + + + + +
   *
+ +164 + + + + + + +
   * <p>If present and <code>true</code>, the credential is believed to be currently backed up.
+ +165 + + + + + + +
   *
+ +166 + + + + + + +
   * <p>If present and <code>false</code>, the credential is believed to not be currently backed up.
+ +167 + + + + + + +
   *
+ +168 + + + + + + +
   * <p>{@link CredentialRecord} implementations SHOULD return the most recent value returned by
+ +169 + + + + + + +
   * {@link AssertionResult#isBackedUp()} or {@link RegistrationResult#isBackedUp()}, if known. If
+ +170 + + + + + + +
   * unknown, {@link CredentialRecord} implementations SHOULD return <code>Optional.empty()</code>.
+ +171 + + + + + + +
   *
+ +172 + + + + + + +
   * <p>Implementations MUST NOT return null.
+ +173 + + + + + + +
   *
+ +174 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +175 + + + + + + +
   *     before reaching a mature release. EXPERIMENTAL: This feature is from a not yet mature
+ +176 + + + + + + +
   *     standard; it could change as the standard matures.
+ +177 + + + + + + +
   */
+ +178 + + + + + + +
  @Deprecated
+ +179 + + + + + + +
  Optional<Boolean> isBackedUp();
+ +180 + + + + + + +
+ +181 + + + + + + +
  /**
+ +182 + + + + + + +
   * This default implementation of {@link
+ +183 + + + + + + +
   * ToPublicKeyCredentialDescriptor#toPublicKeyCredentialDescriptor()} sets the {@link
+ +184 + + + + + + +
   * PublicKeyCredentialDescriptor.PublicKeyCredentialDescriptorBuilder#id(ByteArray) id} field to
+ +185 + + + + + + +
   * the return value of {@link #getCredentialId()} and the {@link
+ +186 + + + + + + +
   * PublicKeyCredentialDescriptor.PublicKeyCredentialDescriptorBuilder#transports(Optional)
+ +187 + + + + + + +
   * transports} field to the return value of {@link #getTransports()}.
+ +188 + + + + + + +
   *
+ +189 + + + + + + +
   * @see <a
+ +190 + + + + + + +
   *     href="https://w3c.github.io/webauthn/#credential-descriptor-for-a-credential-record">credential
+ +191 + + + + + + +
   *     descriptor for a credential record</a> in Web Authentication Level 3 (Editor's Draft)
+ +192 + + + + + + +
   */
+ +193 + + + + + + +
  @Override
+ +194 + + + + + + +
  default PublicKeyCredentialDescriptor toPublicKeyCredentialDescriptor() {
+ +195 + + +1 + +1. toPublicKeyCredentialDescriptor : replaced return value with null for com/yubico/webauthn/CredentialRecord::toPublicKeyCredentialDescriptor → KILLED
+ +
+
+
    return PublicKeyCredentialDescriptor.builder()
+ +196 + + + + + + +
        .id(getCredentialId())
+ +197 + + + + + + +
        .transports(getTransports())
+ +198 + + + + + + +
        .build();
+ +199 + + + + + + +
  }
+ +200 + + + + + + +
+ +201 + + + + + + +
  /**
+ +202 + + + + + + +
   * Convert a credential public key from U2F format to COSE_Key format.
+ +203 + + + + + + +
   *
+ +204 + + + + + + +
   * <p>The U2F JavaScript API encoded credential public keys in <code>ALG_KEY_ECC_X962_RAW</code>
+ +205 + + + + + + +
   * format as specified in <a
+ +206 + + + + + + +
   * href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-registry-v2.0-id-20180227.html#public-key-representation-formats">FIDO
+ +207 + + + + + + +
   * Registry §3.6.2 Public Key Representation Formats</a>. If your database has credential public
+ +208 + + + + + + +
   * keys stored in this format, those public keys need to be converted to COSE_Key format before
+ +209 + + + + + + +
   * they can be used by a {@link CredentialRecord} instance. This function performs the conversion.
+ +210 + + + + + + +
   *
+ +211 + + + + + + +
   * <p>If your application has only used the <code>navigator.credentials.create()</code> API to
+ +212 + + + + + + +
   * register credentials, you likely do not need this function.
+ +213 + + + + + + +
   *
+ +214 + + + + + + +
   * @param es256RawKey a credential public key in <code>ALG_KEY_ECC_X962_RAW</code> format as
+ +215 + + + + + + +
   *     specified in <a
+ +216 + + + + + + +
   *     href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-registry-v2.0-id-20180227.html#public-key-representation-formats">FIDO
+ +217 + + + + + + +
   *     Registry §3.6.2 Public Key Representation Formats</a>.
+ +218 + + + + + + +
   * @return a credential public key in COSE_Key format, suitable to be returned by {@link
+ +219 + + + + + + +
   *     CredentialRecord#getPublicKeyCose()}.
+ +220 + + + + + + +
   * @see RegisteredCredential.RegisteredCredentialBuilder#publicKeyEs256Raw(ByteArray)
+ +221 + + + + + + +
   */
+ +222 + + + + + + +
  static ByteArray cosePublicKeyFromEs256Raw(final ByteArray es256RawKey) {
+ +223 + + +1 + +1. cosePublicKeyFromEs256Raw : replaced return value with null for com/yubico/webauthn/CredentialRecord::cosePublicKeyFromEs256Raw → KILLED
+ +
+
+
    return WebAuthnCodecs.rawEcKeyToCose(es256RawKey);
+ +224 + + + + + + +
  }
+ +225 + + + + + + +
}

Mutations

195 + + + +

1.1
Location : toPublicKeyCredentialDescriptor
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/CredentialRecord::toPublicKeyCredentialDescriptor → KILLED

+
223 + + + +

1.1
Location : cosePublicKeyFromEs256Raw
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with null for com/yubico/webauthn/CredentialRecord::cosePublicKeyFromEs256Raw → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/CredentialRepositoryV1ToV2Adapter.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/CredentialRepositoryV1ToV2Adapter.java.html new file mode 100644 index 000000000..70cca88b5 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/CredentialRepositoryV1ToV2Adapter.java.html @@ -0,0 +1,755 @@ + + + + + + + + + +

CredentialRepositoryV1ToV2Adapter.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.webauthn;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +4 + + + + + + +
import java.util.Collections;
+ +5 + + + + + + +
import java.util.Optional;
+ +6 + + + + + + +
import java.util.Set;
+ +7 + + + + + + +
import lombok.AllArgsConstructor;
+ +8 + + + + + + +
+ +9 + + + + + + +
@AllArgsConstructor
+ +10 + + + + + + +
class CredentialRepositoryV1ToV2Adapter
+ +11 + + + + + + +
    implements CredentialRepositoryV2<RegisteredCredential>, UsernameRepository {
+ +12 + + + + + + +
+ +13 + + + + + + +
  private final CredentialRepository inner;
+ +14 + + + + + + +
+ +15 + + + + + + +
  @Override
+ +16 + + + + + + +
  public Set<? extends ToPublicKeyCredentialDescriptor> getCredentialDescriptorsForUserHandle(
+ +17 + + + + + + +
      ByteArray userHandle) {
+ +18 + + +1 + +1. getCredentialDescriptorsForUserHandle : replaced return value with Collections.emptySet for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getCredentialDescriptorsForUserHandle → NO_COVERAGE
+ +
+
+
    return inner
+ +19 + + + + + + +
        .getUsernameForUserHandle(userHandle)
+ +20 + + + + + + +
        .map(inner::getCredentialIdsForUsername)
+ +21 + + + + + + +
        .orElseGet(Collections::emptySet);
+ +22 + + + + + + +
  }
+ +23 + + + + + + +
+ +24 + + + + + + +
  @Override
+ +25 + + + + + + +
  public Optional<RegisteredCredential> lookup(ByteArray credentialId, ByteArray userHandle) {
+ +26 + + +1 + +1. lookup : replaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::lookup → KILLED
+ +
+
+
    return inner.lookup(credentialId, userHandle);
+ +27 + + + + + + +
  }
+ +28 + + + + + + +
+ +29 + + + + + + +
  @Override
+ +30 + + + + + + +
  public boolean credentialIdExists(ByteArray credentialId) {
+ +31 + + +2 + +1. credentialIdExists : replaced boolean return with true for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::credentialIdExists → KILLED
+2. credentialIdExists : negated conditional → KILLED
+ +
+
+
    return !inner.lookupAll(credentialId).isEmpty();
+ +32 + + + + + + +
  }
+ +33 + + + + + + +
+ +34 + + + + + + +
  @Override
+ +35 + + + + + + +
  public Optional<ByteArray> getUserHandleForUsername(String username) {
+ +36 + + +1 + +1. getUserHandleForUsername : replaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getUserHandleForUsername → KILLED
+ +
+
+
    return inner.getUserHandleForUsername(username);
+ +37 + + + + + + +
  }
+ +38 + + + + + + +
+ +39 + + + + + + +
  @Override
+ +40 + + + + + + +
  public Optional<String> getUsernameForUserHandle(ByteArray userHandle) {
+ +41 + + +1 + +1. getUsernameForUserHandle : replaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getUsernameForUserHandle → KILLED
+ +
+
+
    return inner.getUsernameForUserHandle(userHandle);
+ +42 + + + + + + +
  }
+ +43 + + + + + + +
}

Mutations

18 + + + +

1.1
Location : getCredentialDescriptorsForUserHandle
Killed by : none
replaced return value with Collections.emptySet for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getCredentialDescriptorsForUserHandle → NO_COVERAGE

+
26 + + + +

1.1
Location : lookup
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::lookup → KILLED

+
31 + + + +

1.1
Location : credentialIdExists
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with true for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::credentialIdExists → KILLED

2.2
Location : credentialIdExists
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
36 + + + +

1.1
Location : getUserHandleForUsername
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getUserHandleForUsername → KILLED

+
41 + + + +

1.1
Location : getUsernameForUserHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getUsernameForUserHandle → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/Crypto.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/Crypto.java.html new file mode 100644 index 000000000..edf412d06 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/Crypto.java.html @@ -0,0 +1,1912 @@ + + + + + + + + + +

Crypto.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2014-2018, Yubico AB
+ +2 + + + + + + +
// Copyright (c) 2014, Google Inc.
+ +3 + + + + + + +
// All rights reserved.
+ +4 + + + + + + +
//
+ +5 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +6 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +7 + + + + + + +
//
+ +8 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +9 + + + + + + +
//    list of conditions and the following disclaimer.
+ +10 + + + + + + +
//
+ +11 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +12 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +13 + + + + + + +
//    and/or other materials provided with the distribution.
+ +14 + + + + + + +
//
+ +15 + + + + + + +
// 3. Neither the name of Google Inc. nor the names of its contributors may be
+ +16 + + + + + + +
//    used to endorse or promote products derived from this software without
+ +17 + + + + + + +
//    specific prior written permission.
+ +18 + + + + + + +
//
+ +19 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +20 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +21 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +22 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +23 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +24 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +25 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +26 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +27 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +28 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +29 + + + + + + +
+ +30 + + + + + + +
package com.yubico.webauthn;
+ +31 + + + + + + +
+ +32 + + + + + + +
import com.google.common.hash.Hashing;
+ +33 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +34 + + + + + + +
import com.yubico.webauthn.data.COSEAlgorithmIdentifier;
+ +35 + + + + + + +
import java.math.BigInteger;
+ +36 + + + + + + +
import java.nio.charset.StandardCharsets;
+ +37 + + + + + + +
import java.security.GeneralSecurityException;
+ +38 + + + + + + +
import java.security.MessageDigest;
+ +39 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +40 + + + + + + +
import java.security.PublicKey;
+ +41 + + + + + + +
import java.security.Signature;
+ +42 + + + + + + +
import java.security.cert.X509Certificate;
+ +43 + + + + + + +
import java.security.spec.ECFieldFp;
+ +44 + + + + + + +
import java.security.spec.ECParameterSpec;
+ +45 + + + + + + +
import java.security.spec.EllipticCurve;
+ +46 + + + + + + +
import lombok.experimental.UtilityClass;
+ +47 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +48 + + + + + + +
+ +49 + + + + + + +
@UtilityClass
+ +50 + + + + + + +
@Slf4j
+ +51 + + + + + + +
final class Crypto {
+ +52 + + + + + + +
  // Values from
+ +53 + + + + + + +
  // https://apps.nsa.gov/iaarchive/library/ia-guidance/ia-solutions-for-classified/algorithm-guidance/mathematical-routines-for-the-nist-prime-elliptic-curves.cfm
+ +54 + + + + + + +
  // cross-referenced with "secp256r1" in https://www.secg.org/sec2-v2.pdf
+ +55 + + + + + + +
  private static final EllipticCurve P256 =
+ +56 + + + + + + +
      new EllipticCurve(
+ +57 + + + + + + +
          new ECFieldFp(
+ +58 + + + + + + +
              new BigInteger(
+ +59 + + + + + + +
                  "115792089210356248762697446949407573530086143415290314195533631308867097853951",
+ +60 + + + + + + +
                  10)),
+ +61 + + + + + + +
          new BigInteger(
+ +62 + + + + + + +
              "115792089210356248762697446949407573530086143415290314195533631308867097853948", 10),
+ +63 + + + + + + +
          new BigInteger(
+ +64 + + + + + + +
              "41058363725152142129326129780047268409114441015993725554835256314039467401291", 10));
+ +65 + + + + + + +
+ +66 + + + + + + +
  static boolean isP256(ECParameterSpec params) {
+ +67 + + +2 + +1. isP256 : replaced boolean return with true for com/yubico/webauthn/Crypto::isP256 → KILLED
+2. isP256 : replaced boolean return with false for com/yubico/webauthn/Crypto::isP256 → KILLED
+ +
+
+
    return P256.equals(params.getCurve());
+ +68 + + + + + + +
  }
+ +69 + + + + + + +
+ +70 + + + + + + +
  public static boolean verifySignature(
+ +71 + + + + + + +
      X509Certificate attestationCertificate,
+ +72 + + + + + + +
      ByteArray signedBytes,
+ +73 + + + + + + +
      ByteArray signature,
+ +74 + + + + + + +
      COSEAlgorithmIdentifier alg) {
+ +75 + + +2 + +1. verifySignature : replaced boolean return with true for com/yubico/webauthn/Crypto::verifySignature → KILLED
+2. verifySignature : replaced boolean return with false for com/yubico/webauthn/Crypto::verifySignature → KILLED
+ +
+
+
    return verifySignature(attestationCertificate.getPublicKey(), signedBytes, signature, alg);
+ +76 + + + + + + +
  }
+ +77 + + + + + + +
+ +78 + + + + + + +
  public static boolean verifySignature(
+ +79 + + + + + + +
      PublicKey publicKey,
+ +80 + + + + + + +
      ByteArray signedBytes,
+ +81 + + + + + + +
      ByteArray signatureBytes,
+ +82 + + + + + + +
      COSEAlgorithmIdentifier alg) {
+ +83 + + + + + + +
    try {
+ +84 + + + + + + +
      Signature signature = Signature.getInstance(WebAuthnCodecs.getJavaAlgorithmName(alg));
+ +85 + + +1 + +1. verifySignature : removed call to java/security/Signature::initVerify → KILLED
+ +
+
+
      signature.initVerify(publicKey);
+ +86 + + +1 + +1. verifySignature : removed call to java/security/Signature::update → KILLED
+ +
+
+
      signature.update(signedBytes.getBytes());
+ +87 + + +2 + +1. verifySignature : replaced boolean return with true for com/yubico/webauthn/Crypto::verifySignature → KILLED
+2. verifySignature : replaced boolean return with false for com/yubico/webauthn/Crypto::verifySignature → KILLED
+ +
+
+
      return signature.verify(signatureBytes.getBytes());
+ +88 + + + + + + +
    } catch (GeneralSecurityException | IllegalArgumentException e) {
+ +89 + + + + + + +
      throw new RuntimeException(
+ +90 + + + + + + +
          String.format(
+ +91 + + + + + + +
              "Failed to verify signature. This could be a problem with your JVM environment, or a bug in webauthn-server-core. Public key: %s, signed data: %s , signature: %s",
+ +92 + + + + + + +
              publicKey, signedBytes.getBase64Url(), signatureBytes.getBase64Url()),
+ +93 + + + + + + +
          e);
+ +94 + + + + + + +
    }
+ +95 + + + + + + +
  }
+ +96 + + + + + + +
+ +97 + + + + + + +
  public static ByteArray sha256(ByteArray bytes) {
+ +98 + + +1 + +1. sha256 : replaced return value with null for com/yubico/webauthn/Crypto::sha256 → KILLED
+ +
+
+
    return new ByteArray(Hashing.sha256().hashBytes(bytes.getBytes()).asBytes());
+ +99 + + + + + + +
  }
+ +100 + + + + + + +
+ +101 + + + + + + +
  public static ByteArray sha384(ByteArray bytes) {
+ +102 + + +1 + +1. sha384 : replaced return value with null for com/yubico/webauthn/Crypto::sha384 → KILLED
+ +
+
+
    return new ByteArray(Hashing.sha384().hashBytes(bytes.getBytes()).asBytes());
+ +103 + + + + + + +
  }
+ +104 + + + + + + +
+ +105 + + + + + + +
  public static ByteArray sha512(ByteArray bytes) {
+ +106 + + +1 + +1. sha512 : replaced return value with null for com/yubico/webauthn/Crypto::sha512 → KILLED
+ +
+
+
    return new ByteArray(Hashing.sha512().hashBytes(bytes.getBytes()).asBytes());
+ +107 + + + + + + +
  }
+ +108 + + + + + + +
+ +109 + + + + + + +
  public static ByteArray sha256(String str) {
+ +110 + + +1 + +1. sha256 : replaced return value with null for com/yubico/webauthn/Crypto::sha256 → KILLED
+ +
+
+
    return sha256(new ByteArray(str.getBytes(StandardCharsets.UTF_8)));
+ +111 + + + + + + +
  }
+ +112 + + + + + + +
+ +113 + + + + + + +
  public static ByteArray sha1(ByteArray bytes) throws NoSuchAlgorithmException {
+ +114 + + +1 + +1. sha1 : replaced return value with null for com/yubico/webauthn/Crypto::sha1 → KILLED
+ +
+
+
    return new ByteArray(MessageDigest.getInstance("SHA-1").digest(bytes.getBytes()));
+ +115 + + + + + + +
  }
+ +116 + + + + + + +
}

Mutations

67 + + + +

1.1
Location : isP256
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/Crypto::isP256 → KILLED

2.2
Location : isP256
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with false for com/yubico/webauthn/Crypto::isP256 → KILLED

+
75 + + + +

1.1
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/Crypto::verifySignature → KILLED

2.2
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with false for com/yubico/webauthn/Crypto::verifySignature → KILLED

+
85 + + + +

1.1
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
removed call to java/security/Signature::initVerify → KILLED

+
86 + + + +

1.1
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
removed call to java/security/Signature::update → KILLED

+
87 + + + +

1.1
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with true for com/yubico/webauthn/Crypto::verifySignature → KILLED

2.2
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced boolean return with false for com/yubico/webauthn/Crypto::verifySignature → KILLED

+
98 + + + +

1.1
Location : sha256
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/Crypto::sha256 → KILLED

+
102 + + + +

1.1
Location : sha384
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/Crypto::sha384 → KILLED

+
106 + + + +

1.1
Location : sha512
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/Crypto::sha512 → KILLED

+
110 + + + +

1.1
Location : sha256
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/Crypto::sha256 → KILLED

+
114 + + + +

1.1
Location : sha1
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/Crypto::sha1 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FidoU2fAttestationStatementVerifier.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FidoU2fAttestationStatementVerifier.java.html new file mode 100644 index 000000000..ff982f91d --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FidoU2fAttestationStatementVerifier.java.html @@ -0,0 +1,3258 @@ + + + + + + + + + +

FidoU2fAttestationStatementVerifier.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import static com.yubico.webauthn.Crypto.isP256;
+ +28 + + + + + + +
+ +29 + + + + + + +
import COSE.CoseException;
+ +30 + + + + + + +
import com.fasterxml.jackson.databind.JsonNode;
+ +31 + + + + + + +
import com.yubico.internal.util.ExceptionUtil;
+ +32 + + + + + + +
import com.yubico.webauthn.data.AttestationObject;
+ +33 + + + + + + +
import com.yubico.webauthn.data.AttestationType;
+ +34 + + + + + + +
import com.yubico.webauthn.data.AttestedCredentialData;
+ +35 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +36 + + + + + + +
import java.io.IOException;
+ +37 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +38 + + + + + + +
import java.security.PublicKey;
+ +39 + + + + + + +
import java.security.cert.CertificateException;
+ +40 + + + + + + +
import java.security.cert.X509Certificate;
+ +41 + + + + + + +
import java.security.interfaces.ECPublicKey;
+ +42 + + + + + + +
import java.security.spec.InvalidKeySpecException;
+ +43 + + + + + + +
import java.util.Optional;
+ +44 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +45 + + + + + + +
+ +46 + + + + + + +
@Slf4j
+ +47 + + + + + + +
final class FidoU2fAttestationStatementVerifier
+ +48 + + + + + + +
    implements AttestationStatementVerifier, X5cAttestationStatementVerifier {
+ +49 + + + + + + +
+ +50 + + + + + + +
  private X509Certificate getAttestationCertificate(AttestationObject attestationObject)
+ +51 + + + + + + +
      throws CertificateException {
+ +52 + + +1 + +1. getAttestationCertificate : replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationCertificate → KILLED
+ +
+
+
    return getX5cAttestationCertificate(attestationObject)
+ +53 + + + + + + +
        .map(
+ +54 + + + + + + +
            attestationCertificate -> {
+ +55 + + +1 + +1. lambda$getAttestationCertificate$0 : negated conditional → KILLED
+ +
+
+
              if ("EC".equals(attestationCertificate.getPublicKey().getAlgorithm())
+ +56 + + +1 + +1. lambda$getAttestationCertificate$0 : negated conditional → KILLED
+ +
+
+
                  && isP256(((ECPublicKey) attestationCertificate.getPublicKey()).getParams())) {
+ +57 + + +1 + +1. lambda$getAttestationCertificate$0 : replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$getAttestationCertificate$0 → KILLED
+ +
+
+
                return attestationCertificate;
+ +58 + + + + + + +
              } else {
+ +59 + + + + + + +
                throw new IllegalArgumentException(
+ +60 + + + + + + +
                    "Attestation certificate for fido-u2f must have an ECDSA P-256 public key.");
+ +61 + + + + + + +
              }
+ +62 + + + + + + +
            })
+ +63 + + + + + + +
        .orElseThrow(
+ +64 + + + + + + +
            () ->
+ +65 + + +1 + +1. lambda$getAttestationCertificate$1 : replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$getAttestationCertificate$1 → NO_COVERAGE
+ +
+
+
                new IllegalArgumentException(
+ +66 + + + + + + +
                    "fido-u2f attestation statement must have an \"x5c\" property set to an array of at least one DER encoded X.509 certificate."));
+ +67 + + + + + + +
  }
+ +68 + + + + + + +
+ +69 + + + + + + +
  private static boolean validSelfSignature(X509Certificate cert) {
+ +70 + + + + + + +
    try {
+ +71 + + +1 + +1. validSelfSignature : removed call to java/security/cert/X509Certificate::verify → SURVIVED
+ +
+
+
      cert.verify(cert.getPublicKey());
+ +72 + + +1 + +1. validSelfSignature : replaced boolean return with false for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::validSelfSignature → KILLED
+ +
+
+
      return true;
+ +73 + + + + + + +
    } catch (Exception e) {
+ +74 + + +1 + +1. validSelfSignature : replaced boolean return with true for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::validSelfSignature → SURVIVED
+ +
+
+
      return false;
+ +75 + + + + + + +
    }
+ +76 + + + + + + +
  }
+ +77 + + + + + + +
+ +78 + + + + + + +
  private static ByteArray getRawUserPublicKey(AttestationObject attestationObject)
+ +79 + + + + + + +
      throws IOException, CoseException {
+ +80 + + + + + + +
    final ByteArray pubkeyCose =
+ +81 + + + + + + +
        attestationObject
+ +82 + + + + + + +
            .getAuthenticatorData()
+ +83 + + + + + + +
            .getAttestedCredentialData()
+ +84 + + + + + + +
            .get()
+ +85 + + + + + + +
            .getCredentialPublicKey();
+ +86 + + + + + + +
    final PublicKey pubkey;
+ +87 + + + + + + +
    try {
+ +88 + + + + + + +
      pubkey = WebAuthnCodecs.importCosePublicKey(pubkeyCose);
+ +89 + + + + + + +
    } catch (InvalidKeySpecException | NoSuchAlgorithmException e) {
+ +90 + + + + + + +
      throw ExceptionUtil.wrapAndLog(log, "Failed to decode public key: " + pubkeyCose, e);
+ +91 + + + + + + +
    }
+ +92 + + + + + + +
+ +93 + + + + + + +
    final ECPublicKey ecPubkey;
+ +94 + + + + + + +
    try {
+ +95 + + + + + + +
      ecPubkey = (ECPublicKey) pubkey;
+ +96 + + + + + + +
    } catch (ClassCastException e) {
+ +97 + + + + + + +
      throw new RuntimeException("U2F supports only EC keys, was: " + pubkey);
+ +98 + + + + + + +
    }
+ +99 + + + + + + +
+ +100 + + +1 + +1. getRawUserPublicKey : replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getRawUserPublicKey → KILLED
+ +
+
+
    return WebAuthnCodecs.ecPublicKeyToRaw(ecPubkey);
+ +101 + + + + + + +
  }
+ +102 + + + + + + +
+ +103 + + + + + + +
  @Override
+ +104 + + + + + + +
  public AttestationType getAttestationType(AttestationObject attestationObject)
+ +105 + + + + + + +
      throws CoseException, IOException, CertificateException {
+ +106 + + + + + + +
    X509Certificate attestationCertificate = getAttestationCertificate(attestationObject);
+ +107 + + + + + + +
+ +108 + + +1 + +1. getAttestationType : negated conditional → KILLED
+ +
+
+
    if (attestationCertificate.getPublicKey() instanceof ECPublicKey
+ +109 + + +1 + +1. getAttestationType : negated conditional → KILLED
+ +
+
+
        && validSelfSignature(attestationCertificate)
+ +110 + + + + + + +
        && getRawUserPublicKey(attestationObject)
+ +111 + + +1 + +1. getAttestationType : negated conditional → KILLED
+ +
+
+
            .equals(
+ +112 + + + + + + +
                WebAuthnCodecs.ecPublicKeyToRaw(
+ +113 + + + + + + +
                    (ECPublicKey) attestationCertificate.getPublicKey()))) {
+ +114 + + +1 + +1. getAttestationType : replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationType → KILLED
+ +
+
+
      return AttestationType.SELF_ATTESTATION;
+ +115 + + + + + + +
    } else {
+ +116 + + +1 + +1. getAttestationType : replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationType → KILLED
+ +
+
+
      return AttestationType.BASIC;
+ +117 + + + + + + +
    }
+ +118 + + + + + + +
  }
+ +119 + + + + + + +
+ +120 + + + + + + +
  @Override
+ +121 + + + + + + +
  public boolean verifyAttestationSignature(
+ +122 + + + + + + +
      AttestationObject attestationObject, ByteArray clientDataJsonHash) {
+ +123 + + + + + + +
    final X509Certificate attestationCertificate;
+ +124 + + + + + + +
    try {
+ +125 + + + + + + +
      attestationCertificate = getAttestationCertificate(attestationObject);
+ +126 + + + + + + +
    } catch (CertificateException e) {
+ +127 + + + + + + +
      throw new IllegalArgumentException(
+ +128 + + + + + + +
          String.format(
+ +129 + + + + + + +
              "Failed to parse X.509 certificate from attestation object: %s", attestationObject));
+ +130 + + + + + + +
    }
+ +131 + + + + + + +
+ +132 + + +1 + +1. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    if (!("EC".equals(attestationCertificate.getPublicKey().getAlgorithm())
+ +133 + + +1 + +1. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
        && isP256(((ECPublicKey) attestationCertificate.getPublicKey()).getParams()))) {
+ +134 + + + + + + +
      throw new IllegalArgumentException(
+ +135 + + + + + + +
          "Attestation certificate for fido-u2f must have an ECDSA P-256 public key.");
+ +136 + + + + + + +
    }
+ +137 + + + + + + +
+ +138 + + + + + + +
    final Optional<AttestedCredentialData> attData =
+ +139 + + + + + + +
        attestationObject.getAuthenticatorData().getAttestedCredentialData();
+ +140 + + + + + + +
+ +141 + + +2 + +1. verifyAttestationSignature : replaced boolean return with false for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::verifyAttestationSignature → KILLED
+2. verifyAttestationSignature : replaced boolean return with true for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::verifyAttestationSignature → KILLED
+ +
+
+
    return attData
+ +142 + + + + + + +
        .map(
+ +143 + + + + + + +
            attestedCredentialData -> {
+ +144 + + + + + + +
              JsonNode signature = attestationObject.getAttestationStatement().get("sig");
+ +145 + + + + + + +
+ +146 + + +1 + +1. lambda$verifyAttestationSignature$2 : negated conditional → KILLED
+ +
+
+
              if (signature == null) {
+ +147 + + + + + + +
                throw new IllegalArgumentException(
+ +148 + + + + + + +
                    "fido-u2f attestation statement must have a \"sig\" property set to a DER encoded signature.");
+ +149 + + + + + + +
              }
+ +150 + + + + + + +
+ +151 + + +1 + +1. lambda$verifyAttestationSignature$2 : negated conditional → KILLED
+ +
+
+
              if (signature.isBinary()) {
+ +152 + + + + + + +
                final ByteArray userPublicKey;
+ +153 + + + + + + +
+ +154 + + + + + + +
                try {
+ +155 + + + + + + +
                  userPublicKey = getRawUserPublicKey(attestationObject);
+ +156 + + + + + + +
                } catch (IOException | CoseException e) {
+ +157 + + + + + + +
                  RuntimeException err =
+ +158 + + + + + + +
                      new RuntimeException(
+ +159 + + + + + + +
                          String.format(
+ +160 + + + + + + +
                              "Failed to parse public key from attestation data %s",
+ +161 + + + + + + +
                              attestedCredentialData),
+ +162 + + + + + + +
                          e);
+ +163 + + + + + + +
                  log.error(err.getMessage(), err);
+ +164 + + + + + + +
                  throw err;
+ +165 + + + + + + +
                }
+ +166 + + + + + + +
+ +167 + + + + + + +
                ByteArray keyHandle = attestedCredentialData.getCredentialId();
+ +168 + + + + + + +
+ +169 + + + + + + +
                U2fRawRegisterResponse u2fRegisterResponse;
+ +170 + + + + + + +
                try {
+ +171 + + + + + + +
                  u2fRegisterResponse =
+ +172 + + + + + + +
                      new U2fRawRegisterResponse(
+ +173 + + + + + + +
                          userPublicKey,
+ +174 + + + + + + +
                          keyHandle,
+ +175 + + + + + + +
                          attestationCertificate,
+ +176 + + + + + + +
                          new ByteArray(signature.binaryValue()));
+ +177 + + + + + + +
                } catch (IOException e) {
+ +178 + + + + + + +
                  RuntimeException err =
+ +179 + + + + + + +
                      new RuntimeException(
+ +180 + + + + + + +
                          "signature.isBinary() was true but signature.binaryValue() failed", e);
+ +181 + + + + + + +
                  log.error(err.getMessage(), err);
+ +182 + + + + + + +
                  throw err;
+ +183 + + + + + + +
                }
+ +184 + + + + + + +
+ +185 + + +2 + +1. lambda$verifyAttestationSignature$2 : replaced Boolean return with False for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$2 → KILLED
+2. lambda$verifyAttestationSignature$2 : replaced Boolean return with True for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$2 → KILLED
+ +
+
+
                return u2fRegisterResponse.verifySignature(
+ +186 + + + + + + +
                    attestationObject.getAuthenticatorData().getRpIdHash(), clientDataJsonHash);
+ +187 + + + + + + +
              } else {
+ +188 + + + + + + +
                throw new IllegalArgumentException(
+ +189 + + + + + + +
                    "\"sig\" property of fido-u2f attestation statement must be a CBOR byte array value.");
+ +190 + + + + + + +
              }
+ +191 + + + + + + +
            })
+ +192 + + + + + + +
        .orElseThrow(
+ +193 + + + + + + +
            () ->
+ +194 + + +1 + +1. lambda$verifyAttestationSignature$3 : replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$3 → NO_COVERAGE
+ +
+
+
                new IllegalArgumentException(
+ +195 + + + + + + +
                    "Attestation object for credential creation must have attestation data."));
+ +196 + + + + + + +
  }
+ +197 + + + + + + +
}

Mutations

52 + + + +

1.1
Location : getAttestationCertificate
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationCertificate → KILLED

+
55 + + + +

1.1
Location : lambda$getAttestationCertificate$0
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
56 + + + +

1.1
Location : lambda$getAttestationCertificate$0
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
57 + + + +

1.1
Location : lambda$getAttestationCertificate$0
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$getAttestationCertificate$0 → KILLED

+
65 + + + +

1.1
Location : lambda$getAttestationCertificate$1
Killed by : none
replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$getAttestationCertificate$1 → NO_COVERAGE

+
71 + + + +

1.1
Location : validSelfSignature
Killed by : none
removed call to java/security/cert/X509Certificate::verify → SURVIVED

+
72 + + + +

1.1
Location : validSelfSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::validSelfSignature → KILLED

+
74 + + + +

1.1
Location : validSelfSignature
Killed by : none
replaced boolean return with true for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::validSelfSignature → SURVIVED

+
100 + + + +

1.1
Location : getRawUserPublicKey
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getRawUserPublicKey → KILLED

+
108 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
109 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
111 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
114 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationType → KILLED

+
116 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationType → KILLED

+
132 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
133 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
141 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with false for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::verifyAttestationSignature → KILLED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::verifyAttestationSignature → KILLED

+
146 + + + +

1.1
Location : lambda$verifyAttestationSignature$2
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
151 + + + +

1.1
Location : lambda$verifyAttestationSignature$2
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
185 + + + +

1.1
Location : lambda$verifyAttestationSignature$2
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced Boolean return with False for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$2 → KILLED

2.2
Location : lambda$verifyAttestationSignature$2
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced Boolean return with True for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$2 → KILLED

+
194 + + + +

1.1
Location : lambda$verifyAttestationSignature$3
Killed by : none
replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$3 → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishAssertionOptions.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishAssertionOptions.java.html new file mode 100644 index 000000000..335397f51 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishAssertionOptions.java.html @@ -0,0 +1,2665 @@ + + + + + + + + + +

FinishAssertionOptions.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAssertionResponse;
+ +28 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +29 + + + + + + +
import com.yubico.webauthn.data.ClientAssertionExtensionOutputs;
+ +30 + + + + + + +
import com.yubico.webauthn.data.CollectedClientData;
+ +31 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredential;
+ +32 + + + + + + +
import java.util.Optional;
+ +33 + + + + + + +
import java.util.Set;
+ +34 + + + + + + +
import lombok.Builder;
+ +35 + + + + + + +
import lombok.NonNull;
+ +36 + + + + + + +
import lombok.Value;
+ +37 + + + + + + +
+ +38 + + + + + + +
/** Parameters for {@link RelyingParty#finishAssertion(FinishAssertionOptions)}. */
+ +39 + + + + + + +
@Value
+ +40 + + + + + + +
@Builder(toBuilder = true)
+ +41 + + + + + + +
public class FinishAssertionOptions {
+ +42 + + + + + + +
+ +43 + + + + + + +
  /** The request that the {@link #getResponse() response} is a response to. */
+ +44 + + + + + + +
  @NonNull private final AssertionRequest request;
+ +45 + + + + + + +
+ +46 + + + + + + +
  /**
+ +47 + + + + + + +
   * The client's response to the {@link #getRequest() request}.
+ +48 + + + + + + +
   *
+ +49 + + + + + + +
   * @see <a
+ +50 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-getAssertion">navigator.credentials.get()</a>
+ +51 + + + + + + +
   */
+ +52 + + + + + + +
  @NonNull
+ +53 + + + + + + +
  private final PublicKeyCredential<AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs>
+ +54 + + + + + + +
      response;
+ +55 + + + + + + +
+ +56 + + + + + + +
  /**
+ +57 + + + + + + +
   * The <a href="https://tools.ietf.org/html/rfc8471#section-3.2">token binding ID</a> of the
+ +58 + + + + + + +
   * connection to the client, if any.
+ +59 + + + + + + +
   *
+ +60 + + + + + + +
   * @see <a href="https://tools.ietf.org/html/rfc8471">The Token Binding Protocol Version 1.0</a>
+ +61 + + + + + + +
   */
+ +62 + + + + + + +
  private final ByteArray callerTokenBindingId;
+ +63 + + + + + + +
+ +64 + + + + + + +
  /**
+ +65 + + + + + + +
   * EXPERIMENTAL FEATURE:
+ +66 + + + + + + +
   *
+ +67 + + + + + + +
   * <p>If set to <code>false</code> (the default), the <code>"type"</code> property in the <a
+ +68 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictionary-client-data">collected
+ +69 + + + + + + +
   * client data</a> of the assertion will be verified to equal <code>"webauthn.get"</code>.
+ +70 + + + + + + +
   *
+ +71 + + + + + + +
   * <p>If set to <code>true</code>, it will instead be verified to equal <code>"payment.get"</code>
+ +72 + + + + + + +
   * .
+ +73 + + + + + + +
   *
+ +74 + + + + + + +
   * <p>NOTE: If you're using <a
+ +75 + + + + + + +
   * href="https://www.w3.org/TR/2023/CR-secure-payment-confirmation-20230615/">Secure Payment
+ +76 + + + + + + +
   * Confirmation</a> (SPC), you likely also need to relax the origin validation logic. Right now
+ +77 + + + + + + +
   * this library only supports matching against a finite {@link Set} of acceptable origins. If
+ +78 + + + + + + +
   * necessary, your application may validate the origin externally (see {@link
+ +79 + + + + + + +
   * PublicKeyCredential#getResponse()}, {@link AuthenticatorAssertionResponse#getClientData()} and
+ +80 + + + + + + +
   * {@link CollectedClientData#getOrigin()}) and construct a new {@link RelyingParty} instance for
+ +81 + + + + + + +
   * each SPC response, setting the {@link RelyingParty.RelyingPartyBuilder#origins(Set) origins}
+ +82 + + + + + + +
   * setting on that instance to contain the pre-validated origin value.
+ +83 + + + + + + +
   *
+ +84 + + + + + + +
   * <p>Better support for relaxing origin validation may be added as the feature matures.
+ +85 + + + + + + +
   *
+ +86 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +87 + + + + + + +
   *     before reaching a mature release.
+ +88 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2023/CR-secure-payment-confirmation-20230615/">Secure
+ +89 + + + + + + +
   *     Payment Confirmation</a>
+ +90 + + + + + + +
   * @see <a
+ +91 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictionary-client-data">5.8.1.
+ +92 + + + + + + +
   *     Client Data Used in WebAuthn Signatures (dictionary CollectedClientData)</a>
+ +93 + + + + + + +
   * @see RelyingParty.RelyingPartyBuilder#origins(Set)
+ +94 + + + + + + +
   * @see CollectedClientData
+ +95 + + + + + + +
   * @see CollectedClientData#getOrigin()
+ +96 + + + + + + +
   */
+ +97 + + + + + + +
  @Deprecated @Builder.Default private final boolean isSecurePaymentConfirmation = false;
+ +98 + + + + + + +
+ +99 + + + + + + +
  /**
+ +100 + + + + + + +
   * The <a href="https://tools.ietf.org/html/rfc8471#section-3.2">token binding ID</a> of the
+ +101 + + + + + + +
   * connection to the client, if any.
+ +102 + + + + + + +
   *
+ +103 + + + + + + +
   * @see <a href="https://tools.ietf.org/html/rfc8471">The Token Binding Protocol Version 1.0</a>
+ +104 + + + + + + +
   */
+ +105 + + + + + + +
  public Optional<ByteArray> getCallerTokenBindingId() {
+ +106 + + +1 + +1. getCallerTokenBindingId : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionOptions::getCallerTokenBindingId → KILLED
+ +
+
+
    return Optional.ofNullable(callerTokenBindingId);
+ +107 + + + + + + +
  }
+ +108 + + + + + + +
+ +109 + + + + + + +
  public static FinishAssertionOptionsBuilder.MandatoryStages builder() {
+ +110 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/FinishAssertionOptions::builder → KILLED
+ +
+
+
    return new FinishAssertionOptionsBuilder.MandatoryStages();
+ +111 + + + + + + +
  }
+ +112 + + + + + + +
+ +113 + + + + + + +
  public static class FinishAssertionOptionsBuilder {
+ +114 + + + + + + +
    private ByteArray callerTokenBindingId = null;
+ +115 + + + + + + +
+ +116 + + + + + + +
    public static class MandatoryStages {
+ +117 + + + + + + +
      private final FinishAssertionOptionsBuilder builder = new FinishAssertionOptionsBuilder();
+ +118 + + + + + + +
+ +119 + + + + + + +
      /**
+ +120 + + + + + + +
       * {@link FinishAssertionOptionsBuilder#request(AssertionRequest) request} is a required
+ +121 + + + + + + +
       * parameter.
+ +122 + + + + + + +
       *
+ +123 + + + + + + +
       * @see FinishAssertionOptionsBuilder#request(AssertionRequest)
+ +124 + + + + + + +
       */
+ +125 + + + + + + +
      public Step2 request(AssertionRequest request) {
+ +126 + + + + + + +
        builder.request(request);
+ +127 + + +1 + +1. request : replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages::request → KILLED
+ +
+
+
        return new Step2();
+ +128 + + + + + + +
      }
+ +129 + + + + + + +
+ +130 + + + + + + +
      public class Step2 {
+ +131 + + + + + + +
        /**
+ +132 + + + + + + +
         * {@link FinishAssertionOptionsBuilder#response(PublicKeyCredential) response} is a
+ +133 + + + + + + +
         * required parameter.
+ +134 + + + + + + +
         *
+ +135 + + + + + + +
         * @see FinishAssertionOptionsBuilder#response(PublicKeyCredential)
+ +136 + + + + + + +
         */
+ +137 + + + + + + +
        public FinishAssertionOptionsBuilder response(
+ +138 + + + + + + +
            PublicKeyCredential<AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs>
+ +139 + + + + + + +
                response) {
+ +140 + + +1 + +1. response : replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages$Step2::response → KILLED
+ +
+
+
          return builder.response(response);
+ +141 + + + + + + +
        }
+ +142 + + + + + + +
      }
+ +143 + + + + + + +
    }
+ +144 + + + + + + +
+ +145 + + + + + + +
    /**
+ +146 + + + + + + +
     * The <a href="https://tools.ietf.org/html/rfc8471#section-3.2">token binding ID</a> of the
+ +147 + + + + + + +
     * connection to the client, if any.
+ +148 + + + + + + +
     *
+ +149 + + + + + + +
     * @see <a href="https://tools.ietf.org/html/rfc8471">The Token Binding Protocol Version 1.0</a>
+ +150 + + + + + + +
     */
+ +151 + + + + + + +
    public FinishAssertionOptionsBuilder callerTokenBindingId(
+ +152 + + +1 + +1. callerTokenBindingId : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<ByteArray> callerTokenBindingId) {
+ +153 + + + + + + +
      this.callerTokenBindingId = callerTokenBindingId.orElse(null);
+ +154 + + +1 + +1. callerTokenBindingId : replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder::callerTokenBindingId → KILLED
+ +
+
+
      return this;
+ +155 + + + + + + +
    }
+ +156 + + + + + + +
+ +157 + + + + + + +
    /**
+ +158 + + + + + + +
     * The <a href="https://tools.ietf.org/html/rfc8471#section-3.2">token binding ID</a> of the
+ +159 + + + + + + +
     * connection to the client, if any.
+ +160 + + + + + + +
     *
+ +161 + + + + + + +
     * @see <a href="https://tools.ietf.org/html/rfc8471">The Token Binding Protocol Version 1.0</a>
+ +162 + + + + + + +
     */
+ +163 + + + + + + +
    public FinishAssertionOptionsBuilder callerTokenBindingId(
+ +164 + + +1 + +1. callerTokenBindingId : negated conditional → NO_COVERAGE
+ +
+
+
        @NonNull ByteArray callerTokenBindingId) {
+ +165 + + +1 + +1. callerTokenBindingId : replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder::callerTokenBindingId → NO_COVERAGE
+ +
+
+
      return this.callerTokenBindingId(Optional.of(callerTokenBindingId));
+ +166 + + + + + + +
    }
+ +167 + + + + + + +
  }
+ +168 + + + + + + +
}

Mutations

106 + + + +

1.1
Location : getCallerTokenBindingId
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionOptions::getCallerTokenBindingId → KILLED

+
110 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionOptions::builder → KILLED

+
127 + + + +

1.1
Location : request
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages::request → KILLED

+
140 + + + +

1.1
Location : response
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages$Step2::response → KILLED

+
152 + + + +

1.1
Location : callerTokenBindingId
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
154 + + + +

1.1
Location : callerTokenBindingId
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder::callerTokenBindingId → KILLED

+
164 + + + +

1.1
Location : callerTokenBindingId
Killed by : none
negated conditional → NO_COVERAGE

+
165 + + + +

1.1
Location : callerTokenBindingId
Killed by : none
replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder::callerTokenBindingId → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishAssertionSteps.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishAssertionSteps.java.html new file mode 100644 index 000000000..e117d9ff4 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishAssertionSteps.java.html @@ -0,0 +1,11186 @@ + + + + + + + + + +

FinishAssertionSteps.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import static com.yubico.internal.util.ExceptionUtil.assertTrue;
+ +28 + + + + + + +
+ +29 + + + + + + +
import COSE.CoseException;
+ +30 + + + + + + +
import com.yubico.internal.util.OptionalUtil;
+ +31 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAssertionResponse;
+ +32 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +33 + + + + + + +
import com.yubico.webauthn.data.COSEAlgorithmIdentifier;
+ +34 + + + + + + +
import com.yubico.webauthn.data.ClientAssertionExtensionOutputs;
+ +35 + + + + + + +
import com.yubico.webauthn.data.CollectedClientData;
+ +36 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredential;
+ +37 + + + + + + +
import com.yubico.webauthn.data.UserVerificationRequirement;
+ +38 + + + + + + +
import com.yubico.webauthn.exception.InvalidSignatureCountException;
+ +39 + + + + + + +
import com.yubico.webauthn.extension.appid.AppId;
+ +40 + + + + + + +
import java.io.IOException;
+ +41 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +42 + + + + + + +
import java.security.PublicKey;
+ +43 + + + + + + +
import java.security.spec.InvalidKeySpecException;
+ +44 + + + + + + +
import java.util.Optional;
+ +45 + + + + + + +
import java.util.Set;
+ +46 + + + + + + +
import lombok.AllArgsConstructor;
+ +47 + + + + + + +
import lombok.Value;
+ +48 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +49 + + + + + + +
+ +50 + + + + + + +
@Slf4j
+ +51 + + + + + + +
@AllArgsConstructor
+ +52 + + + + + + +
final class FinishAssertionSteps<C extends CredentialRecord> {
+ +53 + + + + + + +
+ +54 + + + + + + +
  private static final String CLIENT_DATA_TYPE = "webauthn.get";
+ +55 + + + + + + +
  private static final String SPC_CLIENT_DATA_TYPE = "payment.get";
+ +56 + + + + + + +
+ +57 + + + + + + +
  private final AssertionRequest request;
+ +58 + + + + + + +
  private final PublicKeyCredential<AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs>
+ +59 + + + + + + +
      response;
+ +60 + + + + + + +
  private final Optional<ByteArray> callerTokenBindingId;
+ +61 + + + + + + +
  private final Set<String> origins;
+ +62 + + + + + + +
  private final String rpId;
+ +63 + + + + + + +
  private final CredentialRepositoryV2<C> credentialRepositoryV2;
+ +64 + + + + + + +
  private final Optional<UsernameRepository> usernameRepository;
+ +65 + + + + + + +
  private final boolean allowOriginPort;
+ +66 + + + + + + +
  private final boolean allowOriginSubdomain;
+ +67 + + + + + + +
  private final boolean validateSignatureCounter;
+ +68 + + + + + + +
  private final boolean isSecurePaymentConfirmation;
+ +69 + + + + + + +
+ +70 + + + + + + +
  static FinishAssertionSteps<RegisteredCredential> fromV1(
+ +71 + + + + + + +
      RelyingParty rp, FinishAssertionOptions options) {
+ +72 + + + + + + +
    final CredentialRepository credRepo = rp.getCredentialRepository();
+ +73 + + + + + + +
    final CredentialRepositoryV1ToV2Adapter credRepoV2 =
+ +74 + + + + + + +
        new CredentialRepositoryV1ToV2Adapter(credRepo);
+ +75 + + +1 + +1. fromV1 : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::fromV1 → KILLED
+ +
+
+
    return new FinishAssertionSteps<>(
+ +76 + + + + + + +
        options.getRequest(),
+ +77 + + + + + + +
        options.getResponse(),
+ +78 + + + + + + +
        options.getCallerTokenBindingId(),
+ +79 + + + + + + +
        rp.getOrigins(),
+ +80 + + + + + + +
        rp.getIdentity().getId(),
+ +81 + + + + + + +
        credRepoV2,
+ +82 + + + + + + +
        Optional.of(credRepoV2),
+ +83 + + + + + + +
        rp.isAllowOriginPort(),
+ +84 + + + + + + +
        rp.isAllowOriginSubdomain(),
+ +85 + + + + + + +
        rp.isValidateSignatureCounter(),
+ +86 + + + + + + +
        options.isSecurePaymentConfirmation());
+ +87 + + + + + + +
  }
+ +88 + + + + + + +
+ +89 + + + + + + +
  FinishAssertionSteps(RelyingPartyV2<C> rp, FinishAssertionOptions options) {
+ +90 + + + + + + +
    this(
+ +91 + + + + + + +
        options.getRequest(),
+ +92 + + + + + + +
        options.getResponse(),
+ +93 + + + + + + +
        options.getCallerTokenBindingId(),
+ +94 + + + + + + +
        rp.getOrigins(),
+ +95 + + + + + + +
        rp.getIdentity().getId(),
+ +96 + + + + + + +
        rp.getCredentialRepository(),
+ +97 + + + + + + +
        Optional.ofNullable(rp.getUsernameRepository()),
+ +98 + + + + + + +
        rp.isAllowOriginPort(),
+ +99 + + + + + + +
        rp.isAllowOriginSubdomain(),
+ +100 + + + + + + +
        rp.isValidateSignatureCounter(),
+ +101 + + + + + + +
        options.isSecurePaymentConfirmation());
+ +102 + + + + + + +
  }
+ +103 + + + + + + +
+ +104 + + + + + + +
  private Optional<String> getUsernameForUserHandle(final ByteArray userHandle) {
+ +105 + + +2 + +1. getUsernameForUserHandle : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps::getUsernameForUserHandle → KILLED
+2. lambda$getUsernameForUserHandle$0 : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps::lambda$getUsernameForUserHandle$0 → KILLED
+ +
+
+
    return usernameRepository.flatMap(unameRepo -> unameRepo.getUsernameForUserHandle(userHandle));
+ +106 + + + + + + +
  }
+ +107 + + + + + + +
+ +108 + + + + + + +
  public Step5 begin() {
+ +109 + + +1 + +1. begin : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::begin → KILLED
+ +
+
+
    return new Step5();
+ +110 + + + + + + +
  }
+ +111 + + + + + + +
+ +112 + + + + + + +
  public AssertionResult run() throws InvalidSignatureCountException {
+ +113 + + +1 + +1. run : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::run → KILLED
+ +
+
+
    return begin().run();
+ +114 + + + + + + +
  }
+ +115 + + + + + + +
+ +116 + + + + + + +
  public AssertionResultV2<C> runV2() throws InvalidSignatureCountException {
+ +117 + + +1 + +1. runV2 : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::runV2 → KILLED
+ +
+
+
    return begin().runV2();
+ +118 + + + + + + +
  }
+ +119 + + + + + + +
+ +120 + + + + + + +
  interface Step<C extends CredentialRecord, Next extends Step<C, ?>> {
+ +121 + + + + + + +
    Next nextStep();
+ +122 + + + + + + +
+ +123 + + + + + + +
    void validate() throws InvalidSignatureCountException;
+ +124 + + + + + + +
+ +125 + + + + + + +
    default Optional<AssertionResult> result() {
+ +126 + + + + + + +
      return Optional.empty();
+ +127 + + + + + + +
    }
+ +128 + + + + + + +
+ +129 + + + + + + +
    default Optional<AssertionResultV2<C>> resultV2() {
+ +130 + + + + + + +
      return Optional.empty();
+ +131 + + + + + + +
    }
+ +132 + + + + + + +
+ +133 + + + + + + +
    default Next next() throws InvalidSignatureCountException {
+ +134 + + +1 + +1. next : removed call to com/yubico/webauthn/FinishAssertionSteps$Step::validate → KILLED
+ +
+
+
      validate();
+ +135 + + +1 + +1. next : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::next → KILLED
+ +
+
+
      return nextStep();
+ +136 + + + + + + +
    }
+ +137 + + + + + + +
+ +138 + + + + + + +
    default AssertionResult run() throws InvalidSignatureCountException {
+ +139 + + +1 + +1. run : negated conditional → KILLED
+ +
+
+
      if (result().isPresent()) {
+ +140 + + +1 + +1. run : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::run → KILLED
+ +
+
+
        return result().get();
+ +141 + + + + + + +
      } else {
+ +142 + + +1 + +1. run : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::run → KILLED
+ +
+
+
        return next().run();
+ +143 + + + + + + +
      }
+ +144 + + + + + + +
    }
+ +145 + + + + + + +
+ +146 + + + + + + +
    default AssertionResultV2<C> runV2() throws InvalidSignatureCountException {
+ +147 + + +1 + +1. runV2 : negated conditional → KILLED
+ +
+
+
      if (resultV2().isPresent()) {
+ +148 + + +1 + +1. runV2 : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::runV2 → KILLED
+ +
+
+
        return resultV2().get();
+ +149 + + + + + + +
      } else {
+ +150 + + +1 + +1. runV2 : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::runV2 → KILLED
+ +
+
+
        return next().runV2();
+ +151 + + + + + + +
      }
+ +152 + + + + + + +
    }
+ +153 + + + + + + +
  }
+ +154 + + + + + + +
+ +155 + + + + + + +
  // Steps 1 through 4 are to create the request and run the client-side part
+ +156 + + + + + + +
+ +157 + + + + + + +
  @Value
+ +158 + + + + + + +
  class Step5 implements Step<C, Step6> {
+ +159 + + + + + + +
    @Override
+ +160 + + + + + + +
    public Step6 nextStep() {
+ +161 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step5::nextStep → KILLED
+ +
+
+
      return new Step6();
+ +162 + + + + + + +
    }
+ +163 + + + + + + +
+ +164 + + + + + + +
    @Override
+ +165 + + + + + + +
    public void validate() {
+ +166 + + + + + + +
      request
+ +167 + + + + + + +
          .getPublicKeyCredentialRequestOptions()
+ +168 + + + + + + +
          .getAllowCredentials()
+ +169 + + +2 + +1. lambda$validate$0 : negated conditional → KILLED
+2. lambda$validate$0 : replaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$0 → KILLED
+ +
+
+
          .filter(allowCredentials -> !allowCredentials.isEmpty())
+ +170 + + +1 + +1. validate : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
          .ifPresent(
+ +171 + + + + + + +
              allowed -> {
+ +172 + + +1 + +1. lambda$validate$2 : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
                assertTrue(
+ +173 + + +2 + +1. lambda$validate$1 : replaced boolean return with false for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$1 → KILLED
+2. lambda$validate$1 : replaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$1 → KILLED
+ +
+
+
                    allowed.stream().anyMatch(allow -> allow.getId().equals(response.getId())),
+ +174 + + + + + + +
                    "Unrequested credential ID: %s",
+ +175 + + + + + + +
                    response.getId());
+ +176 + + + + + + +
              });
+ +177 + + + + + + +
    }
+ +178 + + + + + + +
  }
+ +179 + + + + + + +
+ +180 + + + + + + +
  @Value
+ +181 + + + + + + +
  class Step6 implements Step<C, Step7> {
+ +182 + + + + + + +
+ +183 + + + + + + +
    private final Optional<ByteArray> requestedUserHandle;
+ +184 + + + + + + +
    private final Optional<String> requestedUsername;
+ +185 + + + + + + +
    private final Optional<ByteArray> responseUserHandle;
+ +186 + + + + + + +
+ +187 + + + + + + +
    private final Optional<ByteArray> effectiveRequestUserHandle;
+ +188 + + + + + + +
    private final Optional<String> effectiveRequestUsername;
+ +189 + + + + + + +
    private final boolean userHandleDerivedFromUsername;
+ +190 + + + + + + +
+ +191 + + + + + + +
    private final Optional<ByteArray> finalUserHandle;
+ +192 + + + + + + +
    private final Optional<String> finalUsername;
+ +193 + + + + + + +
    private final Optional<C> registration;
+ +194 + + + + + + +
+ +195 + + + + + + +
    public Step6() {
+ +196 + + + + + + +
      requestedUserHandle = request.getUserHandle();
+ +197 + + + + + + +
      requestedUsername = request.getUsername();
+ +198 + + + + + + +
      responseUserHandle = response.getResponse().getUserHandle();
+ +199 + + + + + + +
+ +200 + + + + + + +
      effectiveRequestUserHandle =
+ +201 + + + + + + +
          OptionalUtil.orElseOptional(
+ +202 + + + + + + +
              requestedUserHandle,
+ +203 + + + + + + +
              () ->
+ +204 + + +1 + +1. lambda$new$1 : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$1 → KILLED
+ +
+
+
                  usernameRepository.flatMap(
+ +205 + + +1 + +1. lambda$new$0 : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$0 → KILLED
+ +
+
+
                      unr -> requestedUsername.flatMap(unr::getUserHandleForUsername)));
+ +206 + + + + + + +
+ +207 + + + + + + +
      effectiveRequestUsername =
+ +208 + + + + + + +
          OptionalUtil.orElseOptional(
+ +209 + + + + + + +
              requestedUsername,
+ +210 + + + + + + +
              () ->
+ +211 + + +2 + +1. lambda$new$3 : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$3 → SURVIVED
+2. lambda$new$2 : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$2 → SURVIVED
+ +
+
+
                  requestedUserHandle.flatMap(FinishAssertionSteps.this::getUsernameForUserHandle));
+ +212 + + + + + + +
+ +213 + + + + + + +
      userHandleDerivedFromUsername =
+ +214 + + +2 + +1. <init> : negated conditional → KILLED
+2. <init> : negated conditional → KILLED
+ +
+
+
          !requestedUserHandle.isPresent() && effectiveRequestUserHandle.isPresent();
+ +215 + + + + + + +
+ +216 + + + + + + +
      finalUserHandle = OptionalUtil.orOptional(effectiveRequestUserHandle, responseUserHandle);
+ +217 + + + + + + +
      finalUsername =
+ +218 + + + + + + +
          OptionalUtil.orElseOptional(
+ +219 + + + + + + +
              effectiveRequestUsername,
+ +220 + + +2 + +1. lambda$new$5 : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$5 → KILLED
+2. lambda$new$4 : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$4 → KILLED
+ +
+
+
              () -> finalUserHandle.flatMap(FinishAssertionSteps.this::getUsernameForUserHandle));
+ +221 + + + + + + +
+ +222 + + + + + + +
      registration =
+ +223 + + +1 + +1. lambda$new$6 : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$6 → KILLED
+ +
+
+
          finalUserHandle.flatMap(uh -> credentialRepositoryV2.lookup(response.getId(), uh));
+ +224 + + + + + + +
    }
+ +225 + + + + + + +
+ +226 + + + + + + +
    @Override
+ +227 + + + + + + +
    public Step7 nextStep() {
+ +228 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step6::nextStep → KILLED
+ +
+
+
      return new Step7(finalUsername, finalUserHandle.get(), registration);
+ +229 + + + + + + +
    }
+ +230 + + + + + + +
+ +231 + + + + + + +
    @Override
+ +232 + + + + + + +
    public void validate() {
+ +233 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+ +
+
+
      assertTrue(
+ +234 + + +2 + +1. validate : negated conditional → KILLED
+2. validate : negated conditional → KILLED
+ +
+
+
          !(request.getUsername().isPresent() && !usernameRepository.isPresent()),
+ +235 + + + + + + +
          "Cannot set request username when usernameRepository is not configured.");
+ +236 + + + + + + +
+ +237 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+ +
+
+
      assertTrue(
+ +238 + + + + + + +
          finalUserHandle.isPresent(),
+ +239 + + + + + + +
          "Could not identify user to authenticate: none of requested username, requested user handle or response user handle are set.");
+ +240 + + + + + + +
+ +241 + + +2 + +1. validate : negated conditional → KILLED
+2. validate : negated conditional → KILLED
+ +
+
+
      if (requestedUserHandle.isPresent() && responseUserHandle.isPresent()) {
+ +242 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
        assertTrue(
+ +243 + + + + + + +
            requestedUserHandle.get().equals(responseUserHandle.get()),
+ +244 + + + + + + +
            "User handle set in request (%s) does not match user handle in response (%s).",
+ +245 + + + + + + +
            requestedUserHandle.get(),
+ +246 + + + + + + +
            responseUserHandle.get());
+ +247 + + + + + + +
      }
+ +248 + + + + + + +
+ +249 + + +2 + +1. validate : negated conditional → KILLED
+2. validate : negated conditional → KILLED
+ +
+
+
      if (userHandleDerivedFromUsername && responseUserHandle.isPresent()) {
+ +250 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
        assertTrue(
+ +251 + + + + + + +
            effectiveRequestUserHandle.get().equals(responseUserHandle.get()),
+ +252 + + + + + + +
            "User handle in request (%s) (derived from username: %s) does not match user handle in response (%s).",
+ +253 + + + + + + +
            effectiveRequestUserHandle.get(),
+ +254 + + + + + + +
            requestedUsername.get(),
+ +255 + + + + + + +
            responseUserHandle.get());
+ +256 + + + + + + +
      }
+ +257 + + + + + + +
+ +258 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(registration.isPresent(), "Unknown credential: %s", response.getId());
+ +259 + + + + + + +
+ +260 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +261 + + + + + + +
          finalUserHandle.get().equals(registration.get().getUserHandle()),
+ +262 + + + + + + +
          "User handle %s does not own credential %s",
+ +263 + + + + + + +
          finalUserHandle.get(),
+ +264 + + + + + + +
          response.getId());
+ +265 + + + + + + +
+ +266 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
      if (usernameRepository.isPresent()) {
+ +267 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+ +
+
+
        assertTrue(
+ +268 + + + + + + +
            finalUsername.isPresent(),
+ +269 + + + + + + +
            "Unknown username for user handle: %s",
+ +270 + + + + + + +
            finalUserHandle.get());
+ +271 + + + + + + +
      }
+ +272 + + + + + + +
    }
+ +273 + + + + + + +
  }
+ +274 + + + + + + +
+ +275 + + + + + + +
  @Value
+ +276 + + + + + + +
  class Step7 implements Step<C, Step8> {
+ +277 + + + + + + +
    private final Optional<String> username;
+ +278 + + + + + + +
    private final ByteArray userHandle;
+ +279 + + + + + + +
    private final Optional<C> credential;
+ +280 + + + + + + +
+ +281 + + + + + + +
    @Override
+ +282 + + + + + + +
    public Step8 nextStep() {
+ +283 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step7::nextStep → KILLED
+ +
+
+
      return new Step8(username, credential.get());
+ +284 + + + + + + +
    }
+ +285 + + + + + + +
+ +286 + + + + + + +
    @Override
+ +287 + + + + + + +
    public void validate() {
+ +288 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +289 + + + + + + +
          credential.isPresent(),
+ +290 + + + + + + +
          "Unknown credential. Credential ID: %s, user handle: %s",
+ +291 + + + + + + +
          response.getId(),
+ +292 + + + + + + +
          userHandle);
+ +293 + + + + + + +
    }
+ +294 + + + + + + +
  }
+ +295 + + + + + + +
+ +296 + + + + + + +
  @Value
+ +297 + + + + + + +
  class Step8 implements Step<C, Step10> {
+ +298 + + + + + + +
+ +299 + + + + + + +
    private final Optional<String> username;
+ +300 + + + + + + +
    private final C credential;
+ +301 + + + + + + +
+ +302 + + + + + + +
    @Override
+ +303 + + + + + + +
    public void validate() {
+ +304 + + +2 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. validate : negated conditional → KILLED
+ +
+
+
      assertTrue(clientData() != null, "Missing client data.");
+ +305 + + +2 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. validate : negated conditional → KILLED
+ +
+
+
      assertTrue(authenticatorData() != null, "Missing authenticator data.");
+ +306 + + +2 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. validate : negated conditional → KILLED
+ +
+
+
      assertTrue(signature() != null, "Missing signature.");
+ +307 + + + + + + +
    }
+ +308 + + + + + + +
+ +309 + + + + + + +
    @Override
+ +310 + + + + + + +
    public Step10 nextStep() {
+ +311 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::nextStep → KILLED
+ +
+
+
      return new Step10(username, credential);
+ +312 + + + + + + +
    }
+ +313 + + + + + + +
+ +314 + + + + + + +
    public ByteArray authenticatorData() {
+ +315 + + +1 + +1. authenticatorData : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::authenticatorData → KILLED
+ +
+
+
      return response.getResponse().getAuthenticatorData();
+ +316 + + + + + + +
    }
+ +317 + + + + + + +
+ +318 + + + + + + +
    public ByteArray clientData() {
+ +319 + + +1 + +1. clientData : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::clientData → KILLED
+ +
+
+
      return response.getResponse().getClientDataJSON();
+ +320 + + + + + + +
    }
+ +321 + + + + + + +
+ +322 + + + + + + +
    public ByteArray signature() {
+ +323 + + +1 + +1. signature : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::signature → KILLED
+ +
+
+
      return response.getResponse().getSignature();
+ +324 + + + + + + +
    }
+ +325 + + + + + + +
  }
+ +326 + + + + + + +
+ +327 + + + + + + +
  // Nothing to do for step 9
+ +328 + + + + + + +
+ +329 + + + + + + +
  @Value
+ +330 + + + + + + +
  class Step10 implements Step<C, Step11> {
+ +331 + + + + + + +
    private final Optional<String> username;
+ +332 + + + + + + +
    private final C credential;
+ +333 + + + + + + +
+ +334 + + + + + + +
    @Override
+ +335 + + + + + + +
    public void validate() {
+ +336 + + +2 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. validate : negated conditional → KILLED
+ +
+
+
      assertTrue(clientData() != null, "Missing client data.");
+ +337 + + + + + + +
    }
+ +338 + + + + + + +
+ +339 + + + + + + +
    @Override
+ +340 + + + + + + +
    public Step11 nextStep() {
+ +341 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step10::nextStep → KILLED
+ +
+
+
      return new Step11(username, credential, clientData());
+ +342 + + + + + + +
    }
+ +343 + + + + + + +
+ +344 + + + + + + +
    public CollectedClientData clientData() {
+ +345 + + +1 + +1. clientData : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step10::clientData → KILLED
+ +
+
+
      return response.getResponse().getClientData();
+ +346 + + + + + + +
    }
+ +347 + + + + + + +
  }
+ +348 + + + + + + +
+ +349 + + + + + + +
  @Value
+ +350 + + + + + + +
  class Step11 implements Step<C, Step12> {
+ +351 + + + + + + +
    private final Optional<String> username;
+ +352 + + + + + + +
    private final C credential;
+ +353 + + + + + + +
    private final CollectedClientData clientData;
+ +354 + + + + + + +
+ +355 + + + + + + +
    @Override
+ +356 + + + + + + +
    public void validate() {
+ +357 + + + + + + +
      final String expectedType =
+ +358 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
          isSecurePaymentConfirmation ? SPC_CLIENT_DATA_TYPE : CLIENT_DATA_TYPE;
+ +359 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +360 + + + + + + +
          expectedType.equals(clientData.getType()),
+ +361 + + + + + + +
          "The \"type\" in the client data must be exactly \"%s\", was: %s",
+ +362 + + + + + + +
          expectedType,
+ +363 + + + + + + +
          clientData.getType());
+ +364 + + + + + + +
    }
+ +365 + + + + + + +
+ +366 + + + + + + +
    @Override
+ +367 + + + + + + +
    public Step12 nextStep() {
+ +368 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step11::nextStep → KILLED
+ +
+
+
      return new Step12(username, credential);
+ +369 + + + + + + +
    }
+ +370 + + + + + + +
  }
+ +371 + + + + + + +
+ +372 + + + + + + +
  @Value
+ +373 + + + + + + +
  class Step12 implements Step<C, Step13> {
+ +374 + + + + + + +
    private final Optional<String> username;
+ +375 + + + + + + +
    private final C credential;
+ +376 + + + + + + +
+ +377 + + + + + + +
    @Override
+ +378 + + + + + + +
    public void validate() {
+ +379 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +380 + + + + + + +
          request
+ +381 + + + + + + +
              .getPublicKeyCredentialRequestOptions()
+ +382 + + + + + + +
              .getChallenge()
+ +383 + + + + + + +
              .equals(response.getResponse().getClientData().getChallenge()),
+ +384 + + + + + + +
          "Incorrect challenge.");
+ +385 + + + + + + +
    }
+ +386 + + + + + + +
+ +387 + + + + + + +
    @Override
+ +388 + + + + + + +
    public Step13 nextStep() {
+ +389 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step12::nextStep → KILLED
+ +
+
+
      return new Step13(username, credential);
+ +390 + + + + + + +
    }
+ +391 + + + + + + +
  }
+ +392 + + + + + + +
+ +393 + + + + + + +
  @Value
+ +394 + + + + + + +
  class Step13 implements Step<C, Step14> {
+ +395 + + + + + + +
    private final Optional<String> username;
+ +396 + + + + + + +
    private final C credential;
+ +397 + + + + + + +
+ +398 + + + + + + +
    @Override
+ +399 + + + + + + +
    public void validate() {
+ +400 + + + + + + +
      final String responseOrigin = response.getResponse().getClientData().getOrigin();
+ +401 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +402 + + + + + + +
          OriginMatcher.isAllowed(responseOrigin, origins, allowOriginPort, allowOriginSubdomain),
+ +403 + + + + + + +
          "Incorrect origin, please see the RelyingParty.origins setting: %s",
+ +404 + + + + + + +
          responseOrigin);
+ +405 + + + + + + +
    }
+ +406 + + + + + + +
+ +407 + + + + + + +
    @Override
+ +408 + + + + + + +
    public Step14 nextStep() {
+ +409 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step13::nextStep → KILLED
+ +
+
+
      return new Step14(username, credential);
+ +410 + + + + + + +
    }
+ +411 + + + + + + +
  }
+ +412 + + + + + + +
+ +413 + + + + + + +
  @Value
+ +414 + + + + + + +
  class Step14 implements Step<C, Step15> {
+ +415 + + + + + + +
    private final Optional<String> username;
+ +416 + + + + + + +
    private final C credential;
+ +417 + + + + + + +
+ +418 + + + + + + +
    @Override
+ +419 + + + + + + +
    public void validate() {
+ +420 + + + + + + +
      TokenBindingValidator.validate(
+ +421 + + + + + + +
          response.getResponse().getClientData().getTokenBinding(), callerTokenBindingId);
+ +422 + + + + + + +
    }
+ +423 + + + + + + +
+ +424 + + + + + + +
    @Override
+ +425 + + + + + + +
    public Step15 nextStep() {
+ +426 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step14::nextStep → KILLED
+ +
+
+
      return new Step15(username, credential);
+ +427 + + + + + + +
    }
+ +428 + + + + + + +
  }
+ +429 + + + + + + +
+ +430 + + + + + + +
  @Value
+ +431 + + + + + + +
  class Step15 implements Step<C, Step16> {
+ +432 + + + + + + +
    private final Optional<String> username;
+ +433 + + + + + + +
    private final C credential;
+ +434 + + + + + + +
+ +435 + + + + + + +
    @Override
+ +436 + + + + + + +
    public void validate() {
+ +437 + + + + + + +
      try {
+ +438 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
        assertTrue(
+ +439 + + + + + + +
            Crypto.sha256(rpId)
+ +440 + + + + + + +
                .equals(response.getResponse().getParsedAuthenticatorData().getRpIdHash()),
+ +441 + + + + + + +
            "Wrong RP ID hash.");
+ +442 + + + + + + +
      } catch (IllegalArgumentException e) {
+ +443 + + + + + + +
        Optional<AppId> appid =
+ +444 + + + + + + +
            request.getPublicKeyCredentialRequestOptions().getExtensions().getAppid();
+ +445 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
        if (appid.isPresent()) {
+ +446 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
          assertTrue(
+ +447 + + + + + + +
              Crypto.sha256(appid.get().getId())
+ +448 + + + + + + +
                  .equals(response.getResponse().getParsedAuthenticatorData().getRpIdHash()),
+ +449 + + + + + + +
              "Wrong RP ID hash.");
+ +450 + + + + + + +
        } else {
+ +451 + + + + + + +
          throw e;
+ +452 + + + + + + +
        }
+ +453 + + + + + + +
      }
+ +454 + + + + + + +
    }
+ +455 + + + + + + +
+ +456 + + + + + + +
    @Override
+ +457 + + + + + + +
    public Step16 nextStep() {
+ +458 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step15::nextStep → KILLED
+ +
+
+
      return new Step16(username, credential);
+ +459 + + + + + + +
    }
+ +460 + + + + + + +
  }
+ +461 + + + + + + +
+ +462 + + + + + + +
  @Value
+ +463 + + + + + + +
  class Step16 implements Step<C, Step17> {
+ +464 + + + + + + +
    private final Optional<String> username;
+ +465 + + + + + + +
    private final C credential;
+ +466 + + + + + + +
+ +467 + + + + + + +
    @Override
+ +468 + + + + + + +
    public void validate() {
+ +469 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +470 + + + + + + +
          response.getResponse().getParsedAuthenticatorData().getFlags().UP,
+ +471 + + + + + + +
          "User Presence is required.");
+ +472 + + + + + + +
    }
+ +473 + + + + + + +
+ +474 + + + + + + +
    @Override
+ +475 + + + + + + +
    public Step17 nextStep() {
+ +476 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step16::nextStep → KILLED
+ +
+
+
      return new Step17(username, credential);
+ +477 + + + + + + +
    }
+ +478 + + + + + + +
  }
+ +479 + + + + + + +
+ +480 + + + + + + +
  @Value
+ +481 + + + + + + +
  class Step17 implements Step<C, PendingStep16> {
+ +482 + + + + + + +
    private final Optional<String> username;
+ +483 + + + + + + +
    private final C credential;
+ +484 + + + + + + +
+ +485 + + + + + + +
    @Override
+ +486 + + + + + + +
    public void validate() {
+ +487 + + + + + + +
      if (request
+ +488 + + + + + + +
          .getPublicKeyCredentialRequestOptions()
+ +489 + + + + + + +
          .getUserVerification()
+ +490 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
          .equals(Optional.of(UserVerificationRequirement.REQUIRED))) {
+ +491 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
        assertTrue(
+ +492 + + + + + + +
            response.getResponse().getParsedAuthenticatorData().getFlags().UV,
+ +493 + + + + + + +
            "User Verification is required.");
+ +494 + + + + + + +
      }
+ +495 + + + + + + +
    }
+ +496 + + + + + + +
+ +497 + + + + + + +
    @Override
+ +498 + + + + + + +
    public PendingStep16 nextStep() {
+ +499 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step17::nextStep → KILLED
+ +
+
+
      return new PendingStep16(username, credential);
+ +500 + + + + + + +
    }
+ +501 + + + + + + +
  }
+ +502 + + + + + + +
+ +503 + + + + + + +
  @Value
+ +504 + + + + + + +
  // Step 16 in editor's draft as of 2022-11-09 https://w3c.github.io/webauthn/
+ +505 + + + + + + +
  // TODO: Finalize this when spec matures
+ +506 + + + + + + +
  class PendingStep16 implements Step<C, Step18> {
+ +507 + + + + + + +
    private final Optional<String> username;
+ +508 + + + + + + +
    private final C credential;
+ +509 + + + + + + +
+ +510 + + + + + + +
    @Override
+ +511 + + + + + + +
    public void validate() {
+ +512 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +513 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
          !credential.isBackupEligible().isPresent()
+ +514 + + + + + + +
              || response.getResponse().getParsedAuthenticatorData().getFlags().BE
+ +515 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
                  == credential.isBackupEligible().get(),
+ +516 + + + + + + +
          "Backup eligibility must not change; Stored: BE=%s, received: BE=%s for credential: %s",
+ +517 + + + + + + +
          credential.isBackupEligible(),
+ +518 + + + + + + +
          response.getResponse().getParsedAuthenticatorData().getFlags().BE,
+ +519 + + + + + + +
          credential.getCredentialId());
+ +520 + + + + + + +
    }
+ +521 + + + + + + +
+ +522 + + + + + + +
    @Override
+ +523 + + + + + + +
    public Step18 nextStep() {
+ +524 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$PendingStep16::nextStep → KILLED
+ +
+
+
      return new Step18(username, credential);
+ +525 + + + + + + +
    }
+ +526 + + + + + + +
  }
+ +527 + + + + + + +
+ +528 + + + + + + +
  @Value
+ +529 + + + + + + +
  class Step18 implements Step<C, Step19> {
+ +530 + + + + + + +
    private final Optional<String> username;
+ +531 + + + + + + +
    private final C credential;
+ +532 + + + + + + +
+ +533 + + + + + + +
    @Override
+ +534 + + + + + + +
    public void validate() {}
+ +535 + + + + + + +
+ +536 + + + + + + +
    @Override
+ +537 + + + + + + +
    public Step19 nextStep() {
+ +538 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step18::nextStep → KILLED
+ +
+
+
      return new Step19(username, credential);
+ +539 + + + + + + +
    }
+ +540 + + + + + + +
  }
+ +541 + + + + + + +
+ +542 + + + + + + +
  @Value
+ +543 + + + + + + +
  class Step19 implements Step<C, Step20> {
+ +544 + + + + + + +
    private final Optional<String> username;
+ +545 + + + + + + +
    private final C credential;
+ +546 + + + + + + +
+ +547 + + + + + + +
    @Override
+ +548 + + + + + + +
    public void validate() {
+ +549 + + +2 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. validate : negated conditional → KILLED
+ +
+
+
      assertTrue(clientDataJsonHash().size() == 32, "Failed to compute hash of client data");
+ +550 + + + + + + +
    }
+ +551 + + + + + + +
+ +552 + + + + + + +
    @Override
+ +553 + + + + + + +
    public Step20 nextStep() {
+ +554 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step19::nextStep → KILLED
+ +
+
+
      return new Step20(username, credential, clientDataJsonHash());
+ +555 + + + + + + +
    }
+ +556 + + + + + + +
+ +557 + + + + + + +
    public ByteArray clientDataJsonHash() {
+ +558 + + +1 + +1. clientDataJsonHash : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step19::clientDataJsonHash → KILLED
+ +
+
+
      return Crypto.sha256(response.getResponse().getClientDataJSON());
+ +559 + + + + + + +
    }
+ +560 + + + + + + +
  }
+ +561 + + + + + + +
+ +562 + + + + + + +
  @Value
+ +563 + + + + + + +
  class Step20 implements Step<C, Step21> {
+ +564 + + + + + + +
    private final Optional<String> username;
+ +565 + + + + + + +
    private final C credential;
+ +566 + + + + + + +
    private final ByteArray clientDataJsonHash;
+ +567 + + + + + + +
+ +568 + + + + + + +
    @Override
+ +569 + + + + + + +
    public void validate() {
+ +570 + + + + + + +
      final ByteArray cose = credential.getPublicKeyCose();
+ +571 + + + + + + +
      final PublicKey key;
+ +572 + + + + + + +
+ +573 + + + + + + +
      try {
+ +574 + + + + + + +
        key = WebAuthnCodecs.importCosePublicKey(cose);
+ +575 + + + + + + +
      } catch (CoseException | IOException | InvalidKeySpecException e) {
+ +576 + + + + + + +
        throw new IllegalArgumentException(
+ +577 + + + + + + +
            String.format(
+ +578 + + + + + + +
                "Failed to decode public key: Credential ID: %s COSE: %s",
+ +579 + + + + + + +
                credential.getCredentialId().getBase64Url(), cose.getBase64Url()),
+ +580 + + + + + + +
            e);
+ +581 + + + + + + +
      } catch (NoSuchAlgorithmException e) {
+ +582 + + + + + + +
        throw new RuntimeException(e);
+ +583 + + + + + + +
      }
+ +584 + + + + + + +
+ +585 + + + + + + +
      final COSEAlgorithmIdentifier alg =
+ +586 + + + + + + +
          COSEAlgorithmIdentifier.fromPublicKey(cose)
+ +587 + + + + + + +
              .orElseThrow(
+ +588 + + + + + + +
                  () ->
+ +589 + + +1 + +1. lambda$validate$0 : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::lambda$validate$0 → NO_COVERAGE
+ +
+
+
                      new IllegalArgumentException(
+ +590 + + + + + + +
                          String.format("Failed to decode \"alg\" from COSE key: %s", cose)));
+ +591 + + + + + + +
+ +592 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
      if (!Crypto.verifySignature(key, signedBytes(), response.getResponse().getSignature(), alg)) {
+ +593 + + + + + + +
        throw new IllegalArgumentException("Invalid assertion signature.");
+ +594 + + + + + + +
      }
+ +595 + + + + + + +
    }
+ +596 + + + + + + +
+ +597 + + + + + + +
    @Override
+ +598 + + + + + + +
    public Step21 nextStep() {
+ +599 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::nextStep → KILLED
+ +
+
+
      return new Step21(username, credential);
+ +600 + + + + + + +
    }
+ +601 + + + + + + +
+ +602 + + + + + + +
    public ByteArray signedBytes() {
+ +603 + + +1 + +1. signedBytes : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::signedBytes → KILLED
+ +
+
+
      return response.getResponse().getAuthenticatorData().concat(clientDataJsonHash);
+ +604 + + + + + + +
    }
+ +605 + + + + + + +
  }
+ +606 + + + + + + +
+ +607 + + + + + + +
  @Value
+ +608 + + + + + + +
  class Step21 implements Step<C, Finished> {
+ +609 + + + + + + +
    private final Optional<String> username;
+ +610 + + + + + + +
    private final C credential;
+ +611 + + + + + + +
    private final long assertionSignatureCount;
+ +612 + + + + + + +
    private final long storedSignatureCountBefore;
+ +613 + + + + + + +
+ +614 + + + + + + +
    public Step21(Optional<String> username, C credential) {
+ +615 + + + + + + +
      this.username = username;
+ +616 + + + + + + +
      this.credential = credential;
+ +617 + + + + + + +
      this.assertionSignatureCount =
+ +618 + + + + + + +
          response.getResponse().getParsedAuthenticatorData().getSignatureCounter();
+ +619 + + + + + + +
      this.storedSignatureCountBefore = credential.getSignatureCount();
+ +620 + + + + + + +
    }
+ +621 + + + + + + +
+ +622 + + + + + + +
    @Override
+ +623 + + + + + + +
    public void validate() throws InvalidSignatureCountException {
+ +624 + + +2 + +1. validate : negated conditional → KILLED
+2. validate : negated conditional → KILLED
+ +
+
+
      if (validateSignatureCounter && !signatureCounterValid()) {
+ +625 + + + + + + +
        throw new InvalidSignatureCountException(
+ +626 + + +1 + +1. validate : Replaced long addition with subtraction → KILLED
+ +
+
+
            response.getId(), storedSignatureCountBefore + 1, assertionSignatureCount);
+ +627 + + + + + + +
      }
+ +628 + + + + + + +
    }
+ +629 + + + + + + +
+ +630 + + + + + + +
    private boolean signatureCounterValid() {
+ +631 + + +5 + +1. signatureCounterValid : negated conditional → KILLED
+2. signatureCounterValid : negated conditional → KILLED
+3. signatureCounterValid : changed conditional boundary → KILLED
+4. signatureCounterValid : replaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step21::signatureCounterValid → KILLED
+5. signatureCounterValid : negated conditional → KILLED
+ +
+
+
      return (assertionSignatureCount == 0 && storedSignatureCountBefore == 0)
+ +632 + + + + + + +
          || assertionSignatureCount > storedSignatureCountBefore;
+ +633 + + + + + + +
    }
+ +634 + + + + + + +
+ +635 + + + + + + +
    @Override
+ +636 + + + + + + +
    public Finished nextStep() {
+ +637 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step21::nextStep → KILLED
+ +
+
+
      return new Finished(credential, username, assertionSignatureCount, signatureCounterValid());
+ +638 + + + + + + +
    }
+ +639 + + + + + + +
  }
+ +640 + + + + + + +
+ +641 + + + + + + +
  @Value
+ +642 + + + + + + +
  class Finished implements Step<C, Finished> {
+ +643 + + + + + + +
    private final C credential;
+ +644 + + + + + + +
    private final Optional<String> username;
+ +645 + + + + + + +
    private final long assertionSignatureCount;
+ +646 + + + + + + +
    private final boolean signatureCounterValid;
+ +647 + + + + + + +
+ +648 + + + + + + +
    @Override
+ +649 + + + + + + +
    public void validate() {
+ +650 + + + + + + +
      /* No-op */
+ +651 + + + + + + +
    }
+ +652 + + + + + + +
+ +653 + + + + + + +
    @Override
+ +654 + + + + + + +
    public Finished nextStep() {
+ +655 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Finished::nextStep → NO_COVERAGE
+ +
+
+
      return this;
+ +656 + + + + + + +
    }
+ +657 + + + + + + +
+ +658 + + + + + + +
    @Override
+ +659 + + + + + + +
    public Optional<AssertionResult> result() {
+ +660 + + +1 + +1. result : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Finished::result → KILLED
+ +
+
+
      return Optional.of(
+ +661 + + + + + + +
          new AssertionResult(
+ +662 + + + + + + +
              true,
+ +663 + + + + + + +
              response,
+ +664 + + + + + + +
              (RegisteredCredential) credential,
+ +665 + + + + + + +
              username.get(),
+ +666 + + + + + + +
              signatureCounterValid));
+ +667 + + + + + + +
    }
+ +668 + + + + + + +
+ +669 + + + + + + +
    public Optional<AssertionResultV2<C>> resultV2() {
+ +670 + + +1 + +1. resultV2 : replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Finished::resultV2 → KILLED
+ +
+
+
      return Optional.of(
+ +671 + + + + + + +
          new AssertionResultV2<C>(true, response, credential, signatureCounterValid));
+ +672 + + + + + + +
    }
+ +673 + + + + + + +
  }
+ +674 + + + + + + +
}

Mutations

75 + + + +

1.1
Location : fromV1
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::fromV1 → KILLED

+
105 + + + +

1.1
Location : getUsernameForUserHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps::getUsernameForUserHandle → KILLED

2.2
Location : lambda$getUsernameForUserHandle$0
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps::lambda$getUsernameForUserHandle$0 → KILLED

+
109 + + + +

1.1
Location : begin
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::begin → KILLED

+
113 + + + +

1.1
Location : run
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::run → KILLED

+
117 + + + +

1.1
Location : runV2
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::runV2 → KILLED

+
134 + + + +

1.1
Location : next
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/webauthn/FinishAssertionSteps$Step::validate → KILLED

+
135 + + + +

1.1
Location : next
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::next → KILLED

+
139 + + + +

1.1
Location : run
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
140 + + + +

1.1
Location : run
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::run → KILLED

+
142 + + + +

1.1
Location : run
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::run → KILLED

+
147 + + + +

1.1
Location : runV2
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
148 + + + +

1.1
Location : runV2
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::runV2 → KILLED

+
150 + + + +

1.1
Location : runV2
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::runV2 → KILLED

+
161 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step5::nextStep → KILLED

+
169 + + + +

1.1
Location : lambda$validate$0
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

2.2
Location : lambda$validate$0
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$0 → KILLED

+
170 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to java/util/Optional::ifPresent → KILLED

+
172 + + + +

1.1
Location : lambda$validate$2
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
173 + + + +

1.1
Location : lambda$validate$1
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced boolean return with false for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$1 → KILLED

2.2
Location : lambda$validate$1
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$1 → KILLED

+
204 + + + +

1.1
Location : lambda$new$1
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$1 → KILLED

+
205 + + + +

1.1
Location : lambda$new$0
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$0 → KILLED

+
211 + + + +

1.1
Location : lambda$new$3
Killed by : none
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$3 → SURVIVED

2.2
Location : lambda$new$2
Killed by : none
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$2 → SURVIVED

+
214 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

2.2
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
220 + + + +

1.1
Location : lambda$new$5
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$5 → KILLED

2.2
Location : lambda$new$4
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$4 → KILLED

+
223 + + + +

1.1
Location : lambda$new$6
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$6 → KILLED

+
228 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step6::nextStep → KILLED

+
233 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
234 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
237 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
241 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
242 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
249 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
250 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
258 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
260 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
266 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
267 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
283 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step7::nextStep → KILLED

+
288 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
304 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
305 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
306 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
311 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::nextStep → KILLED

+
315 + + + +

1.1
Location : authenticatorData
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::authenticatorData → KILLED

+
319 + + + +

1.1
Location : clientData
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::clientData → KILLED

+
323 + + + +

1.1
Location : signature
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::signature → KILLED

+
336 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
341 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step10::nextStep → KILLED

+
345 + + + +

1.1
Location : clientData
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step10::clientData → KILLED

+
358 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
359 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
368 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step11::nextStep → KILLED

+
379 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
389 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step12::nextStep → KILLED

+
401 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
409 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step13::nextStep → KILLED

+
426 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step14::nextStep → KILLED

+
438 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
445 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
446 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
458 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step15::nextStep → KILLED

+
469 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
476 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step16::nextStep → KILLED

+
490 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
491 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
499 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step17::nextStep → KILLED

+
512 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
513 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
515 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
524 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$PendingStep16::nextStep → KILLED

+
538 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step18::nextStep → KILLED

+
549 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

2.2
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
554 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step19::nextStep → KILLED

+
558 + + + +

1.1
Location : clientDataJsonHash
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step19::clientDataJsonHash → KILLED

+
589 + + + +

1.1
Location : lambda$validate$0
Killed by : none
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::lambda$validate$0 → NO_COVERAGE

+
592 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
599 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::nextStep → KILLED

+
603 + + + +

1.1
Location : signedBytes
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::signedBytes → KILLED

+
624 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
626 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
Replaced long addition with subtraction → KILLED

+
631 + + + +

1.1
Location : signatureCounterValid
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

2.2
Location : signatureCounterValid
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

3.3
Location : signatureCounterValid
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
changed conditional boundary → KILLED

4.4
Location : signatureCounterValid
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step21::signatureCounterValid → KILLED

5.5
Location : signatureCounterValid
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
637 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step21::nextStep → KILLED

+
655 + + + +

1.1
Location : nextStep
Killed by : none
replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Finished::nextStep → NO_COVERAGE

+
660 + + + +

1.1
Location : result
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Finished::result → KILLED

+
670 + + + +

1.1
Location : resultV2
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Finished::resultV2 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishRegistrationOptions.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishRegistrationOptions.java.html new file mode 100644 index 000000000..bfe9c1d42 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishRegistrationOptions.java.html @@ -0,0 +1,2170 @@ + + + + + + + + + +

FinishRegistrationOptions.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAttestationResponse;
+ +28 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +29 + + + + + + +
import com.yubico.webauthn.data.ClientRegistrationExtensionOutputs;
+ +30 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredential;
+ +31 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions;
+ +32 + + + + + + +
import java.util.Optional;
+ +33 + + + + + + +
import lombok.Builder;
+ +34 + + + + + + +
import lombok.NonNull;
+ +35 + + + + + + +
import lombok.Value;
+ +36 + + + + + + +
+ +37 + + + + + + +
/** Parameters for {@link RelyingParty#finishRegistration(FinishRegistrationOptions)}. */
+ +38 + + + + + + +
@Value
+ +39 + + + + + + +
@Builder(toBuilder = true)
+ +40 + + + + + + +
public class FinishRegistrationOptions {
+ +41 + + + + + + +
+ +42 + + + + + + +
  /** The request that the {@link #getResponse() response} is a response to. */
+ +43 + + + + + + +
  @NonNull private final PublicKeyCredentialCreationOptions request;
+ +44 + + + + + + +
+ +45 + + + + + + +
  /**
+ +46 + + + + + + +
   * The client's response to the {@link #getRequest() request}.
+ +47 + + + + + + +
   *
+ +48 + + + + + + +
   * <p><a
+ +49 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-createCredential">navigator.credentials.create()</a>
+ +50 + + + + + + +
   */
+ +51 + + + + + + +
  @NonNull
+ +52 + + + + + + +
  private final PublicKeyCredential<
+ +53 + + + + + + +
          AuthenticatorAttestationResponse, ClientRegistrationExtensionOutputs>
+ +54 + + + + + + +
      response;
+ +55 + + + + + + +
+ +56 + + + + + + +
  /**
+ +57 + + + + + + +
   * The <a href="https://tools.ietf.org/html/rfc8471#section-3.2">token binding ID</a> of the
+ +58 + + + + + + +
   * connection to the client, if any.
+ +59 + + + + + + +
   *
+ +60 + + + + + + +
   * @see <a href="https://tools.ietf.org/html/rfc8471">The Token Binding Protocol Version 1.0</a>
+ +61 + + + + + + +
   */
+ +62 + + + + + + +
  private final ByteArray callerTokenBindingId;
+ +63 + + + + + + +
+ +64 + + + + + + +
  /**
+ +65 + + + + + + +
   * The <a href="https://tools.ietf.org/html/rfc8471#section-3.2">token binding ID</a> of the
+ +66 + + + + + + +
   * connection to the client, if any.
+ +67 + + + + + + +
   *
+ +68 + + + + + + +
   * @see <a href="https://tools.ietf.org/html/rfc8471">The Token Binding Protocol Version 1.0</a>
+ +69 + + + + + + +
   */
+ +70 + + + + + + +
  public Optional<ByteArray> getCallerTokenBindingId() {
+ +71 + + +1 + +1. getCallerTokenBindingId : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationOptions::getCallerTokenBindingId → KILLED
+ +
+
+
    return Optional.ofNullable(callerTokenBindingId);
+ +72 + + + + + + +
  }
+ +73 + + + + + + +
+ +74 + + + + + + +
  public static FinishRegistrationOptionsBuilder.MandatoryStages builder() {
+ +75 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions::builder → KILLED
+ +
+
+
    return new FinishRegistrationOptionsBuilder.MandatoryStages();
+ +76 + + + + + + +
  }
+ +77 + + + + + + +
+ +78 + + + + + + +
  public static class FinishRegistrationOptionsBuilder {
+ +79 + + + + + + +
    private ByteArray callerTokenBindingId = null;
+ +80 + + + + + + +
+ +81 + + + + + + +
    public static class MandatoryStages {
+ +82 + + + + + + +
      private final FinishRegistrationOptionsBuilder builder =
+ +83 + + + + + + +
          new FinishRegistrationOptionsBuilder();
+ +84 + + + + + + +
+ +85 + + + + + + +
      /**
+ +86 + + + + + + +
       * {@link FinishRegistrationOptionsBuilder#request(PublicKeyCredentialCreationOptions)
+ +87 + + + + + + +
       * request} is a required parameter.
+ +88 + + + + + + +
       *
+ +89 + + + + + + +
       * @see FinishRegistrationOptionsBuilder#request(PublicKeyCredentialCreationOptions)
+ +90 + + + + + + +
       */
+ +91 + + + + + + +
      public Step2 request(PublicKeyCredentialCreationOptions request) {
+ +92 + + + + + + +
        builder.request(request);
+ +93 + + +1 + +1. request : replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages::request → KILLED
+ +
+
+
        return new Step2();
+ +94 + + + + + + +
      }
+ +95 + + + + + + +
+ +96 + + + + + + +
      public class Step2 {
+ +97 + + + + + + +
        /**
+ +98 + + + + + + +
         * {@link FinishRegistrationOptionsBuilder#response(PublicKeyCredential) response} is a
+ +99 + + + + + + +
         * required parameter.
+ +100 + + + + + + +
         *
+ +101 + + + + + + +
         * @see FinishRegistrationOptionsBuilder#response(PublicKeyCredential)
+ +102 + + + + + + +
         */
+ +103 + + + + + + +
        public FinishRegistrationOptionsBuilder response(
+ +104 + + + + + + +
            PublicKeyCredential<
+ +105 + + + + + + +
                    AuthenticatorAttestationResponse, ClientRegistrationExtensionOutputs>
+ +106 + + + + + + +
                response) {
+ +107 + + +1 + +1. response : replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages$Step2::response → KILLED
+ +
+
+
          return builder.response(response);
+ +108 + + + + + + +
        }
+ +109 + + + + + + +
      }
+ +110 + + + + + + +
    }
+ +111 + + + + + + +
+ +112 + + + + + + +
    /**
+ +113 + + + + + + +
     * The <a href="https://tools.ietf.org/html/rfc8471#section-3.2">token binding ID</a> of the
+ +114 + + + + + + +
     * connection to the client, if any.
+ +115 + + + + + + +
     *
+ +116 + + + + + + +
     * @see <a href="https://tools.ietf.org/html/rfc8471">The Token Binding Protocol Version 1.0</a>
+ +117 + + + + + + +
     */
+ +118 + + + + + + +
    public FinishRegistrationOptionsBuilder callerTokenBindingId(
+ +119 + + +1 + +1. callerTokenBindingId : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<ByteArray> callerTokenBindingId) {
+ +120 + + + + + + +
      this.callerTokenBindingId = callerTokenBindingId.orElse(null);
+ +121 + + +1 + +1. callerTokenBindingId : replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder::callerTokenBindingId → KILLED
+ +
+
+
      return this;
+ +122 + + + + + + +
    }
+ +123 + + + + + + +
+ +124 + + + + + + +
    /**
+ +125 + + + + + + +
     * The <a href="https://tools.ietf.org/html/rfc8471#section-3.2">token binding ID</a> of the
+ +126 + + + + + + +
     * connection to the client, if any.
+ +127 + + + + + + +
     *
+ +128 + + + + + + +
     * @see <a href="https://tools.ietf.org/html/rfc8471">The Token Binding Protocol Version 1.0</a>
+ +129 + + + + + + +
     */
+ +130 + + + + + + +
    public FinishRegistrationOptionsBuilder callerTokenBindingId(
+ +131 + + +1 + +1. callerTokenBindingId : negated conditional → NO_COVERAGE
+ +
+
+
        @NonNull ByteArray callerTokenBindingId) {
+ +132 + + +1 + +1. callerTokenBindingId : replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder::callerTokenBindingId → NO_COVERAGE
+ +
+
+
      return this.callerTokenBindingId(Optional.of(callerTokenBindingId));
+ +133 + + + + + + +
    }
+ +134 + + + + + + +
  }
+ +135 + + + + + + +
}

Mutations

71 + + + +

1.1
Location : getCallerTokenBindingId
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationOptions::getCallerTokenBindingId → KILLED

+
75 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions::builder → KILLED

+
93 + + + +

1.1
Location : request
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages::request → KILLED

+
107 + + + +

1.1
Location : response
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages$Step2::response → KILLED

+
119 + + + +

1.1
Location : callerTokenBindingId
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
121 + + + +

1.1
Location : callerTokenBindingId
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder::callerTokenBindingId → KILLED

+
131 + + + +

1.1
Location : callerTokenBindingId
Killed by : none
negated conditional → NO_COVERAGE

+
132 + + + +

1.1
Location : callerTokenBindingId
Killed by : none
replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder::callerTokenBindingId → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishRegistrationSteps.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishRegistrationSteps.java.html new file mode 100644 index 000000000..0c3e5cfe7 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/FinishRegistrationSteps.java.html @@ -0,0 +1,11381 @@ + + + + + + + + + +

FinishRegistrationSteps.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import static com.yubico.internal.util.ExceptionUtil.assertTrue;
+ +28 + + + + + + +
import static com.yubico.internal.util.ExceptionUtil.wrapAndLog;
+ +29 + + + + + + +
+ +30 + + + + + + +
import COSE.CoseException;
+ +31 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +32 + + + + + + +
import com.yubico.internal.util.CertificateParser;
+ +33 + + + + + + +
import com.yubico.internal.util.OptionalUtil;
+ +34 + + + + + + +
import com.yubico.webauthn.attestation.AttestationTrustSource;
+ +35 + + + + + + +
import com.yubico.webauthn.attestation.AttestationTrustSource.TrustRootsResult;
+ +36 + + + + + + +
import com.yubico.webauthn.data.AttestationObject;
+ +37 + + + + + + +
import com.yubico.webauthn.data.AttestationType;
+ +38 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAttestationResponse;
+ +39 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorSelectionCriteria;
+ +40 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +41 + + + + + + +
import com.yubico.webauthn.data.ClientRegistrationExtensionOutputs;
+ +42 + + + + + + +
import com.yubico.webauthn.data.CollectedClientData;
+ +43 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredential;
+ +44 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions;
+ +45 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialParameters;
+ +46 + + + + + + +
import com.yubico.webauthn.data.UserVerificationRequirement;
+ +47 + + + + + + +
import java.io.IOException;
+ +48 + + + + + + +
import java.security.InvalidAlgorithmParameterException;
+ +49 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +50 + + + + + + +
import java.security.cert.CertPath;
+ +51 + + + + + + +
import java.security.cert.CertPathValidator;
+ +52 + + + + + + +
import java.security.cert.CertPathValidatorException;
+ +53 + + + + + + +
import java.security.cert.CertificateException;
+ +54 + + + + + + +
import java.security.cert.CertificateFactory;
+ +55 + + + + + + +
import java.security.cert.PKIXCertPathValidatorResult;
+ +56 + + + + + + +
import java.security.cert.PKIXParameters;
+ +57 + + + + + + +
import java.security.cert.PKIXReason;
+ +58 + + + + + + +
import java.security.cert.TrustAnchor;
+ +59 + + + + + + +
import java.security.cert.X509Certificate;
+ +60 + + + + + + +
import java.security.spec.InvalidKeySpecException;
+ +61 + + + + + + +
import java.sql.Date;
+ +62 + + + + + + +
import java.time.Clock;
+ +63 + + + + + + +
import java.util.List;
+ +64 + + + + + + +
import java.util.Optional;
+ +65 + + + + + + +
import java.util.Set;
+ +66 + + + + + + +
import java.util.stream.Collectors;
+ +67 + + + + + + +
import lombok.AllArgsConstructor;
+ +68 + + + + + + +
import lombok.Value;
+ +69 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +70 + + + + + + +
+ +71 + + + + + + +
@Slf4j
+ +72 + + + + + + +
@AllArgsConstructor
+ +73 + + + + + + +
final class FinishRegistrationSteps {
+ +74 + + + + + + +
+ +75 + + + + + + +
  private static final String CLIENT_DATA_TYPE = "webauthn.create";
+ +76 + + + + + + +
  private static final ByteArray ZERO_AAGUID =
+ +77 + + + + + + +
      new ByteArray(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0});
+ +78 + + + + + + +
+ +79 + + + + + + +
  private final PublicKeyCredentialCreationOptions request;
+ +80 + + + + + + +
  private final PublicKeyCredential<
+ +81 + + + + + + +
          AuthenticatorAttestationResponse, ClientRegistrationExtensionOutputs>
+ +82 + + + + + + +
      response;
+ +83 + + + + + + +
  private final Optional<ByteArray> callerTokenBindingId;
+ +84 + + + + + + +
  private final Set<String> origins;
+ +85 + + + + + + +
  private final String rpId;
+ +86 + + + + + + +
  private final boolean allowUntrustedAttestation;
+ +87 + + + + + + +
  private final Optional<AttestationTrustSource> attestationTrustSource;
+ +88 + + + + + + +
  private final CredentialRepositoryV2<?> credentialRepositoryV2;
+ +89 + + + + + + +
  private final Clock clock;
+ +90 + + + + + + +
  private final boolean allowOriginPort;
+ +91 + + + + + + +
  private final boolean allowOriginSubdomain;
+ +92 + + + + + + +
+ +93 + + + + + + +
  static FinishRegistrationSteps fromV1(RelyingParty rp, FinishRegistrationOptions options) {
+ +94 + + +1 + +1. fromV1 : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::fromV1 → KILLED
+ +
+
+
    return new FinishRegistrationSteps(
+ +95 + + + + + + +
        options.getRequest(),
+ +96 + + + + + + +
        options.getResponse(),
+ +97 + + + + + + +
        options.getCallerTokenBindingId(),
+ +98 + + + + + + +
        rp.getOrigins(),
+ +99 + + + + + + +
        rp.getIdentity().getId(),
+ +100 + + + + + + +
        rp.isAllowUntrustedAttestation(),
+ +101 + + + + + + +
        rp.getAttestationTrustSource(),
+ +102 + + + + + + +
        new CredentialRepositoryV1ToV2Adapter(rp.getCredentialRepository()),
+ +103 + + + + + + +
        rp.getClock(),
+ +104 + + + + + + +
        rp.isAllowOriginPort(),
+ +105 + + + + + + +
        rp.isAllowOriginSubdomain());
+ +106 + + + + + + +
  }
+ +107 + + + + + + +
+ +108 + + + + + + +
  FinishRegistrationSteps(RelyingPartyV2<?> rp, FinishRegistrationOptions options) {
+ +109 + + + + + + +
    this(
+ +110 + + + + + + +
        options.getRequest(),
+ +111 + + + + + + +
        options.getResponse(),
+ +112 + + + + + + +
        options.getCallerTokenBindingId(),
+ +113 + + + + + + +
        rp.getOrigins(),
+ +114 + + + + + + +
        rp.getIdentity().getId(),
+ +115 + + + + + + +
        rp.isAllowUntrustedAttestation(),
+ +116 + + + + + + +
        rp.getAttestationTrustSource(),
+ +117 + + + + + + +
        rp.getCredentialRepository(),
+ +118 + + + + + + +
        rp.getClock(),
+ +119 + + + + + + +
        rp.isAllowOriginPort(),
+ +120 + + + + + + +
        rp.isAllowOriginSubdomain());
+ +121 + + + + + + +
  }
+ +122 + + + + + + +
+ +123 + + + + + + +
  public Step6 begin() {
+ +124 + + +1 + +1. begin : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::begin → KILLED
+ +
+
+
    return new Step6();
+ +125 + + + + + + +
  }
+ +126 + + + + + + +
+ +127 + + + + + + +
  public RegistrationResult run() {
+ +128 + + +1 + +1. run : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::run → KILLED
+ +
+
+
    return begin().run();
+ +129 + + + + + + +
  }
+ +130 + + + + + + +
+ +131 + + + + + + +
  interface Step<Next extends Step<?>> {
+ +132 + + + + + + +
    Next nextStep();
+ +133 + + + + + + +
+ +134 + + + + + + +
    void validate();
+ +135 + + + + + + +
+ +136 + + + + + + +
    default Optional<RegistrationResult> result() {
+ +137 + + + + + + +
      return Optional.empty();
+ +138 + + + + + + +
    }
+ +139 + + + + + + +
+ +140 + + + + + + +
    default Next next() {
+ +141 + + +1 + +1. next : removed call to com/yubico/webauthn/FinishRegistrationSteps$Step::validate → KILLED
+ +
+
+
      validate();
+ +142 + + +1 + +1. next : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::next → KILLED
+ +
+
+
      return nextStep();
+ +143 + + + + + + +
    }
+ +144 + + + + + + +
+ +145 + + + + + + +
    default RegistrationResult run() {
+ +146 + + +1 + +1. run : negated conditional → KILLED
+ +
+
+
      if (result().isPresent()) {
+ +147 + + +1 + +1. run : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::run → KILLED
+ +
+
+
        return result().get();
+ +148 + + + + + + +
      } else {
+ +149 + + +1 + +1. run : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::run → KILLED
+ +
+
+
        return next().run();
+ +150 + + + + + + +
      }
+ +151 + + + + + + +
    }
+ +152 + + + + + + +
  }
+ +153 + + + + + + +
+ +154 + + + + + + +
  // Steps 1 through 4 are to create the request and run the client-side part
+ +155 + + + + + + +
+ +156 + + + + + + +
  // Step 5 is integrated into step 6 here
+ +157 + + + + + + +
+ +158 + + + + + + +
  @Value
+ +159 + + + + + + +
  class Step6 implements Step<Step7> {
+ +160 + + + + + + +
    @Override
+ +161 + + + + + + +
    public void validate() {
+ +162 + + +2 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. validate : negated conditional → KILLED
+ +
+
+
      assertTrue(clientData() != null, "Client data must not be null.");
+ +163 + + + + + + +
    }
+ +164 + + + + + + +
+ +165 + + + + + + +
    @Override
+ +166 + + + + + + +
    public Step7 nextStep() {
+ +167 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step6::nextStep → KILLED
+ +
+
+
      return new Step7(clientData());
+ +168 + + + + + + +
    }
+ +169 + + + + + + +
+ +170 + + + + + + +
    public CollectedClientData clientData() {
+ +171 + + +1 + +1. clientData : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step6::clientData → KILLED
+ +
+
+
      return response.getResponse().getClientData();
+ +172 + + + + + + +
    }
+ +173 + + + + + + +
  }
+ +174 + + + + + + +
+ +175 + + + + + + +
  @Value
+ +176 + + + + + + +
  class Step7 implements Step<Step8> {
+ +177 + + + + + + +
    private final CollectedClientData clientData;
+ +178 + + + + + + +
+ +179 + + + + + + +
    @Override
+ +180 + + + + + + +
    public void validate() {
+ +181 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +182 + + + + + + +
          CLIENT_DATA_TYPE.equals(clientData.getType()),
+ +183 + + + + + + +
          "The \"type\" in the client data must be exactly \"%s\", was: %s",
+ +184 + + + + + + +
          CLIENT_DATA_TYPE,
+ +185 + + + + + + +
          clientData.getType());
+ +186 + + + + + + +
    }
+ +187 + + + + + + +
+ +188 + + + + + + +
    @Override
+ +189 + + + + + + +
    public Step8 nextStep() {
+ +190 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step7::nextStep → KILLED
+ +
+
+
      return new Step8(clientData);
+ +191 + + + + + + +
    }
+ +192 + + + + + + +
  }
+ +193 + + + + + + +
+ +194 + + + + + + +
  @Value
+ +195 + + + + + + +
  class Step8 implements Step<Step9> {
+ +196 + + + + + + +
    private final CollectedClientData clientData;
+ +197 + + + + + + +
+ +198 + + + + + + +
    @Override
+ +199 + + + + + + +
    public void validate() {
+ +200 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(request.getChallenge().equals(clientData.getChallenge()), "Incorrect challenge.");
+ +201 + + + + + + +
    }
+ +202 + + + + + + +
+ +203 + + + + + + +
    @Override
+ +204 + + + + + + +
    public Step9 nextStep() {
+ +205 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step8::nextStep → KILLED
+ +
+
+
      return new Step9(clientData);
+ +206 + + + + + + +
    }
+ +207 + + + + + + +
  }
+ +208 + + + + + + +
+ +209 + + + + + + +
  @Value
+ +210 + + + + + + +
  class Step9 implements Step<Step10> {
+ +211 + + + + + + +
    private final CollectedClientData clientData;
+ +212 + + + + + + +
+ +213 + + + + + + +
    @Override
+ +214 + + + + + + +
    public void validate() {
+ +215 + + + + + + +
      final String responseOrigin = clientData.getOrigin();
+ +216 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +217 + + + + + + +
          OriginMatcher.isAllowed(responseOrigin, origins, allowOriginPort, allowOriginSubdomain),
+ +218 + + + + + + +
          "Incorrect origin, please see the RelyingParty.origins setting: %s",
+ +219 + + + + + + +
          responseOrigin);
+ +220 + + + + + + +
    }
+ +221 + + + + + + +
+ +222 + + + + + + +
    @Override
+ +223 + + + + + + +
    public Step10 nextStep() {
+ +224 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step9::nextStep → KILLED
+ +
+
+
      return new Step10(clientData);
+ +225 + + + + + + +
    }
+ +226 + + + + + + +
  }
+ +227 + + + + + + +
+ +228 + + + + + + +
  @Value
+ +229 + + + + + + +
  class Step10 implements Step<Step11> {
+ +230 + + + + + + +
    private final CollectedClientData clientData;
+ +231 + + + + + + +
+ +232 + + + + + + +
    @Override
+ +233 + + + + + + +
    public void validate() {
+ +234 + + + + + + +
      TokenBindingValidator.validate(clientData.getTokenBinding(), callerTokenBindingId);
+ +235 + + + + + + +
    }
+ +236 + + + + + + +
+ +237 + + + + + + +
    @Override
+ +238 + + + + + + +
    public Step11 nextStep() {
+ +239 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step10::nextStep → KILLED
+ +
+
+
      return new Step11();
+ +240 + + + + + + +
    }
+ +241 + + + + + + +
  }
+ +242 + + + + + + +
+ +243 + + + + + + +
  @Value
+ +244 + + + + + + +
  class Step11 implements Step<Step12> {
+ +245 + + + + + + +
    @Override
+ +246 + + + + + + +
    public void validate() {
+ +247 + + +2 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. validate : negated conditional → KILLED
+ +
+
+
      assertTrue(clientDataJsonHash().size() == 32, "Failed to compute hash of client data");
+ +248 + + + + + + +
    }
+ +249 + + + + + + +
+ +250 + + + + + + +
    @Override
+ +251 + + + + + + +
    public Step12 nextStep() {
+ +252 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step11::nextStep → KILLED
+ +
+
+
      return new Step12(clientDataJsonHash());
+ +253 + + + + + + +
    }
+ +254 + + + + + + +
+ +255 + + + + + + +
    public ByteArray clientDataJsonHash() {
+ +256 + + +1 + +1. clientDataJsonHash : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step11::clientDataJsonHash → KILLED
+ +
+
+
      return Crypto.sha256(response.getResponse().getClientDataJSON());
+ +257 + + + + + + +
    }
+ +258 + + + + + + +
  }
+ +259 + + + + + + +
+ +260 + + + + + + +
  @Value
+ +261 + + + + + + +
  class Step12 implements Step<Step13> {
+ +262 + + + + + + +
    private final ByteArray clientDataJsonHash;
+ +263 + + + + + + +
+ +264 + + + + + + +
    @Override
+ +265 + + + + + + +
    public void validate() {
+ +266 + + +2 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. validate : negated conditional → KILLED
+ +
+
+
      assertTrue(attestation() != null, "Malformed attestation object.");
+ +267 + + + + + + +
    }
+ +268 + + + + + + +
+ +269 + + + + + + +
    @Override
+ +270 + + + + + + +
    public Step13 nextStep() {
+ +271 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step12::nextStep → KILLED
+ +
+
+
      return new Step13(clientDataJsonHash, attestation());
+ +272 + + + + + + +
    }
+ +273 + + + + + + +
+ +274 + + + + + + +
    public AttestationObject attestation() {
+ +275 + + +1 + +1. attestation : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step12::attestation → KILLED
+ +
+
+
      return response.getResponse().getAttestation();
+ +276 + + + + + + +
    }
+ +277 + + + + + + +
  }
+ +278 + + + + + + +
+ +279 + + + + + + +
  @Value
+ +280 + + + + + + +
  class Step13 implements Step<Step14> {
+ +281 + + + + + + +
    private final ByteArray clientDataJsonHash;
+ +282 + + + + + + +
    private final AttestationObject attestation;
+ +283 + + + + + + +
+ +284 + + + + + + +
    @Override
+ +285 + + + + + + +
    public void validate() {
+ +286 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +287 + + + + + + +
          Crypto.sha256(rpId)
+ +288 + + + + + + +
              .equals(response.getResponse().getAttestation().getAuthenticatorData().getRpIdHash()),
+ +289 + + + + + + +
          "Wrong RP ID hash.");
+ +290 + + + + + + +
    }
+ +291 + + + + + + +
+ +292 + + + + + + +
    @Override
+ +293 + + + + + + +
    public Step14 nextStep() {
+ +294 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step13::nextStep → KILLED
+ +
+
+
      return new Step14(clientDataJsonHash, attestation);
+ +295 + + + + + + +
    }
+ +296 + + + + + + +
  }
+ +297 + + + + + + +
+ +298 + + + + + + +
  @Value
+ +299 + + + + + + +
  class Step14 implements Step<Step15> {
+ +300 + + + + + + +
    private final ByteArray clientDataJsonHash;
+ +301 + + + + + + +
    private final AttestationObject attestation;
+ +302 + + + + + + +
+ +303 + + + + + + +
    @Override
+ +304 + + + + + + +
    public void validate() {
+ +305 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +306 + + + + + + +
          response.getResponse().getParsedAuthenticatorData().getFlags().UP,
+ +307 + + + + + + +
          "User Presence is required.");
+ +308 + + + + + + +
    }
+ +309 + + + + + + +
+ +310 + + + + + + +
    @Override
+ +311 + + + + + + +
    public Step15 nextStep() {
+ +312 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step14::nextStep → KILLED
+ +
+
+
      return new Step15(clientDataJsonHash, attestation);
+ +313 + + + + + + +
    }
+ +314 + + + + + + +
  }
+ +315 + + + + + + +
+ +316 + + + + + + +
  @Value
+ +317 + + + + + + +
  class Step15 implements Step<Step16> {
+ +318 + + + + + + +
    private final ByteArray clientDataJsonHash;
+ +319 + + + + + + +
    private final AttestationObject attestation;
+ +320 + + + + + + +
+ +321 + + + + + + +
    @Override
+ +322 + + + + + + +
    public void validate() {
+ +323 + + + + + + +
      if (request
+ +324 + + + + + + +
              .getAuthenticatorSelection()
+ +325 + + + + + + +
              .flatMap(AuthenticatorSelectionCriteria::getUserVerification)
+ +326 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
              .orElse(UserVerificationRequirement.PREFERRED)
+ +327 + + + + + + +
          == UserVerificationRequirement.REQUIRED) {
+ +328 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
        assertTrue(
+ +329 + + + + + + +
            response.getResponse().getParsedAuthenticatorData().getFlags().UV,
+ +330 + + + + + + +
            "User Verification is required.");
+ +331 + + + + + + +
      }
+ +332 + + + + + + +
    }
+ +333 + + + + + + +
+ +334 + + + + + + +
    @Override
+ +335 + + + + + + +
    public Step16 nextStep() {
+ +336 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step15::nextStep → KILLED
+ +
+
+
      return new Step16(clientDataJsonHash, attestation);
+ +337 + + + + + + +
    }
+ +338 + + + + + + +
  }
+ +339 + + + + + + +
+ +340 + + + + + + +
  @Value
+ +341 + + + + + + +
  class Step16 implements Step<Step18> {
+ +342 + + + + + + +
    private final ByteArray clientDataJsonHash;
+ +343 + + + + + + +
    private final AttestationObject attestation;
+ +344 + + + + + + +
+ +345 + + + + + + +
    @Override
+ +346 + + + + + + +
    public void validate() {
+ +347 + + + + + + +
      final ByteArray publicKeyCose =
+ +348 + + + + + + +
          response
+ +349 + + + + + + +
              .getResponse()
+ +350 + + + + + + +
              .getAttestation()
+ +351 + + + + + + +
              .getAuthenticatorData()
+ +352 + + + + + + +
              .getAttestedCredentialData()
+ +353 + + + + + + +
              .get()
+ +354 + + + + + + +
              .getCredentialPublicKey();
+ +355 + + + + + + +
      CBORObject publicKeyCbor = CBORObject.DecodeFromBytes(publicKeyCose.getBytes());
+ +356 + + + + + + +
      final int alg = publicKeyCbor.get(CBORObject.FromObject(3)).AsInt32();
+ +357 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +358 + + + + + + +
          request.getPubKeyCredParams().stream()
+ +359 + + +2 + +1. lambda$validate$0 : replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step16::lambda$validate$0 → KILLED
+2. lambda$validate$0 : negated conditional → KILLED
+ +
+
+
              .anyMatch(pkcparam -> pkcparam.getAlg().getId() == alg),
+ +360 + + + + + + +
          "Unrequested credential key algorithm: got %d, expected one of: %s",
+ +361 + + + + + + +
          alg,
+ +362 + + + + + + +
          request.getPubKeyCredParams().stream()
+ +363 + + + + + + +
              .map(PublicKeyCredentialParameters::getAlg)
+ +364 + + + + + + +
              .collect(Collectors.toList()));
+ +365 + + + + + + +
      try {
+ +366 + + + + + + +
        WebAuthnCodecs.importCosePublicKey(publicKeyCose);
+ +367 + + + + + + +
      } catch (CoseException | IOException | InvalidKeySpecException | NoSuchAlgorithmException e) {
+ +368 + + + + + + +
        throw wrapAndLog(log, "Failed to parse credential public key", e);
+ +369 + + + + + + +
      }
+ +370 + + + + + + +
    }
+ +371 + + + + + + +
+ +372 + + + + + + +
    @Override
+ +373 + + + + + + +
    public Step18 nextStep() {
+ +374 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step16::nextStep → KILLED
+ +
+
+
      return new Step18(clientDataJsonHash, attestation);
+ +375 + + + + + + +
    }
+ +376 + + + + + + +
  }
+ +377 + + + + + + +
+ +378 + + + + + + +
  // Nothing to do for step 17
+ +379 + + + + + + +
+ +380 + + + + + + +
  @Value
+ +381 + + + + + + +
  class Step18 implements Step<Step19> {
+ +382 + + + + + + +
    private final ByteArray clientDataJsonHash;
+ +383 + + + + + + +
    private final AttestationObject attestation;
+ +384 + + + + + + +
+ +385 + + + + + + +
    @Override
+ +386 + + + + + + +
    public void validate() {}
+ +387 + + + + + + +
+ +388 + + + + + + +
    @Override
+ +389 + + + + + + +
    public Step19 nextStep() {
+ +390 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step18::nextStep → KILLED
+ +
+
+
      return new Step19(clientDataJsonHash, attestation, attestationStatementVerifier());
+ +391 + + + + + + +
    }
+ +392 + + + + + + +
+ +393 + + + + + + +
    public String format() {
+ +394 + + +1 + +1. format : replaced return value with "" for com/yubico/webauthn/FinishRegistrationSteps$Step18::format → KILLED
+ +
+
+
      return attestation.getFormat();
+ +395 + + + + + + +
    }
+ +396 + + + + + + +
+ +397 + + + + + + +
    public Optional<AttestationStatementVerifier> attestationStatementVerifier() {
+ +398 + + + + + + +
      switch (format()) {
+ +399 + + + + + + +
        case "fido-u2f":
+ +400 + + +1 + +1. attestationStatementVerifier : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED
+ +
+
+
          return Optional.of(new FidoU2fAttestationStatementVerifier());
+ +401 + + + + + + +
        case "none":
+ +402 + + +1 + +1. attestationStatementVerifier : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED
+ +
+
+
          return Optional.of(new NoneAttestationStatementVerifier());
+ +403 + + + + + + +
        case "packed":
+ +404 + + +1 + +1. attestationStatementVerifier : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED
+ +
+
+
          return Optional.of(new PackedAttestationStatementVerifier());
+ +405 + + + + + + +
        case "android-safetynet":
+ +406 + + +1 + +1. attestationStatementVerifier : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED
+ +
+
+
          return Optional.of(new AndroidSafetynetAttestationStatementVerifier());
+ +407 + + + + + + +
        case "apple":
+ +408 + + +1 + +1. attestationStatementVerifier : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED
+ +
+
+
          return Optional.of(new AppleAttestationStatementVerifier());
+ +409 + + + + + + +
        case "tpm":
+ +410 + + +1 + +1. attestationStatementVerifier : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED
+ +
+
+
          return Optional.of(new TpmAttestationStatementVerifier());
+ +411 + + + + + + +
        default:
+ +412 + + + + + + +
          return Optional.empty();
+ +413 + + + + + + +
      }
+ +414 + + + + + + +
    }
+ +415 + + + + + + +
  }
+ +416 + + + + + + +
+ +417 + + + + + + +
  @Value
+ +418 + + + + + + +
  class Step19 implements Step<Step20> {
+ +419 + + + + + + +
    private final ByteArray clientDataJsonHash;
+ +420 + + + + + + +
    private final AttestationObject attestation;
+ +421 + + + + + + +
    private final Optional<AttestationStatementVerifier> attestationStatementVerifier;
+ +422 + + + + + + +
+ +423 + + + + + + +
    @Override
+ +424 + + + + + + +
    public void validate() {
+ +425 + + +1 + +1. validate : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
      attestationStatementVerifier.ifPresent(
+ +426 + + + + + + +
          verifier -> {
+ +427 + + +1 + +1. lambda$validate$0 : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
            assertTrue(
+ +428 + + + + + + +
                verifier.verifyAttestationSignature(attestation, clientDataJsonHash),
+ +429 + + + + + + +
                "Invalid attestation signature.");
+ +430 + + + + + + +
          });
+ +431 + + + + + + +
+ +432 + + +2 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. validate : negated conditional → KILLED
+ +
+
+
      assertTrue(attestationType() != null, "Failed to determine attestation type");
+ +433 + + + + + + +
    }
+ +434 + + + + + + +
+ +435 + + + + + + +
    @Override
+ +436 + + + + + + +
    public Step20 nextStep() {
+ +437 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::nextStep → KILLED
+ +
+
+
      return new Step20(attestation, attestationType(), attestationTrustPath());
+ +438 + + + + + + +
    }
+ +439 + + + + + + +
+ +440 + + + + + + +
    public AttestationType attestationType() {
+ +441 + + + + + + +
      try {
+ +442 + + +1 + +1. attestationType : negated conditional → KILLED
+ +
+
+
        if (attestationStatementVerifier.isPresent()) {
+ +443 + + +1 + +1. attestationType : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType → KILLED
+ +
+
+
          return attestationStatementVerifier.get().getAttestationType(attestation);
+ +444 + + + + + + +
        } else {
+ +445 + + +1 + +1. attestationType : negated conditional → SURVIVED
+ +
+
+
          switch (attestation.getFormat()) {
+ +446 + + + + + + +
            case "android-key":
+ +447 + + + + + + +
              // TODO delete this once android-key attestation verification is implemented
+ +448 + + +1 + +1. attestationType : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType → KILLED
+ +
+
+
              return AttestationType.BASIC;
+ +449 + + + + + + +
            default:
+ +450 + + +1 + +1. attestationType : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType → KILLED
+ +
+
+
              return AttestationType.UNKNOWN;
+ +451 + + + + + + +
          }
+ +452 + + + + + + +
        }
+ +453 + + + + + + +
      } catch (IOException | CoseException | CertificateException e) {
+ +454 + + + + + + +
        throw new IllegalArgumentException("Failed to resolve attestation type.", e);
+ +455 + + + + + + +
      }
+ +456 + + + + + + +
    }
+ +457 + + + + + + +
+ +458 + + + + + + +
    public Optional<List<X509Certificate>> attestationTrustPath() {
+ +459 + + +1 + +1. attestationTrustPath : negated conditional → KILLED
+ +
+
+
      if (attestationStatementVerifier.isPresent()) {
+ +460 + + + + + + +
        AttestationStatementVerifier verifier = attestationStatementVerifier.get();
+ +461 + + +1 + +1. attestationTrustPath : negated conditional → KILLED
+ +
+
+
        if (verifier instanceof X5cAttestationStatementVerifier) {
+ +462 + + + + + + +
          try {
+ +463 + + +1 + +1. attestationTrustPath : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationTrustPath → KILLED
+ +
+
+
            return ((X5cAttestationStatementVerifier) verifier)
+ +464 + + + + + + +
                .getAttestationTrustPath(attestation);
+ +465 + + + + + + +
          } catch (CertificateException e) {
+ +466 + + + + + + +
            throw new IllegalArgumentException("Failed to resolve attestation trust path.", e);
+ +467 + + + + + + +
          }
+ +468 + + + + + + +
        } else {
+ +469 + + + + + + +
          return Optional.empty();
+ +470 + + + + + + +
        }
+ +471 + + + + + + +
      } else {
+ +472 + + + + + + +
        return Optional.empty();
+ +473 + + + + + + +
      }
+ +474 + + + + + + +
    }
+ +475 + + + + + + +
  }
+ +476 + + + + + + +
+ +477 + + + + + + +
  @Value
+ +478 + + + + + + +
  class Step20 implements Step<Step21> {
+ +479 + + + + + + +
    private final AttestationObject attestation;
+ +480 + + + + + + +
    private final AttestationType attestationType;
+ +481 + + + + + + +
    private final Optional<List<X509Certificate>> attestationTrustPath;
+ +482 + + + + + + +
+ +483 + + + + + + +
    private final Optional<AttestationTrustSource.TrustRootsResult> trustRoots;
+ +484 + + + + + + +
+ +485 + + + + + + +
    public Step20(
+ +486 + + + + + + +
        AttestationObject attestation,
+ +487 + + + + + + +
        AttestationType attestationType,
+ +488 + + + + + + +
        Optional<List<X509Certificate>> attestationTrustPath) {
+ +489 + + + + + + +
      this.attestation = attestation;
+ +490 + + + + + + +
      this.attestationType = attestationType;
+ +491 + + + + + + +
      this.attestationTrustPath = attestationTrustPath;
+ +492 + + + + + + +
      this.trustRoots = findTrustRoots();
+ +493 + + + + + + +
    }
+ +494 + + + + + + +
+ +495 + + + + + + +
    @Override
+ +496 + + + + + + +
    public void validate() {}
+ +497 + + + + + + +
+ +498 + + + + + + +
    @Override
+ +499 + + + + + + +
    public Step21 nextStep() {
+ +500 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step20::nextStep → KILLED
+ +
+
+
      return new Step21(attestation, attestationType, attestationTrustPath, trustRoots);
+ +501 + + + + + + +
    }
+ +502 + + + + + + +
+ +503 + + + + + + +
    private Optional<AttestationTrustSource.TrustRootsResult> findTrustRoots() {
+ +504 + + +1 + +1. findTrustRoots : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::findTrustRoots → KILLED
+ +
+
+
      return attestationTrustSource.flatMap(
+ +505 + + + + + + +
          attestationTrustSource ->
+ +506 + + +1 + +1. lambda$findTrustRoots$3 : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$3 → KILLED
+ +
+
+
              attestationTrustPath.map(
+ +507 + + + + + + +
                  atp ->
+ +508 + + +1 + +1. lambda$findTrustRoots$2 : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$2 → KILLED
+ +
+
+
                      attestationTrustSource.findTrustRoots(
+ +509 + + + + + + +
                          atp,
+ +510 + + + + + + +
                          OptionalUtil.orElseOptional(
+ +511 + + + + + + +
                              Optional.of(
+ +512 + + + + + + +
                                      attestation
+ +513 + + + + + + +
                                          .getAuthenticatorData()
+ +514 + + + + + + +
                                          .getAttestedCredentialData()
+ +515 + + + + + + +
                                          .get()
+ +516 + + + + + + +
                                          .getAaguid())
+ +517 + + +2 + +1. lambda$findTrustRoots$0 : negated conditional → KILLED
+2. lambda$findTrustRoots$0 : replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$0 → KILLED
+ +
+
+
                                  .filter(aaguid -> !aaguid.equals(ZERO_AAGUID)),
+ +518 + + + + + + +
                              () -> {
+ +519 + + +1 + +1. lambda$findTrustRoots$1 : negated conditional → KILLED
+ +
+
+
                                if (!atp.isEmpty()) {
+ +520 + + +1 + +1. lambda$findTrustRoots$1 : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$1 → KILLED
+ +
+
+
                                  return CertificateParser.parseFidoAaguidExtension(atp.get(0))
+ +521 + + + + + + +
                                      .map(ByteArray::new);
+ +522 + + + + + + +
                                } else {
+ +523 + + + + + + +
                                  return Optional.empty();
+ +524 + + + + + + +
                                }
+ +525 + + + + + + +
                              }))));
+ +526 + + + + + + +
    }
+ +527 + + + + + + +
  }
+ +528 + + + + + + +
+ +529 + + + + + + +
  @Value
+ +530 + + + + + + +
  class Step21 implements Step<Step22> {
+ +531 + + + + + + +
    private final AttestationObject attestation;
+ +532 + + + + + + +
    private final AttestationType attestationType;
+ +533 + + + + + + +
    private final Optional<List<X509Certificate>> attestationTrustPath;
+ +534 + + + + + + +
    private final Optional<AttestationTrustSource.TrustRootsResult> trustRoots;
+ +535 + + + + + + +
+ +536 + + + + + + +
    private final boolean attestationTrusted;
+ +537 + + + + + + +
+ +538 + + + + + + +
    public Step21(
+ +539 + + + + + + +
        AttestationObject attestation,
+ +540 + + + + + + +
        AttestationType attestationType,
+ +541 + + + + + + +
        Optional<List<X509Certificate>> attestationTrustPath,
+ +542 + + + + + + +
        Optional<AttestationTrustSource.TrustRootsResult> trustRoots) {
+ +543 + + + + + + +
      this.attestation = attestation;
+ +544 + + + + + + +
      this.attestationType = attestationType;
+ +545 + + + + + + +
      this.attestationTrustPath = attestationTrustPath;
+ +546 + + + + + + +
      this.trustRoots = trustRoots;
+ +547 + + + + + + +
+ +548 + + + + + + +
      this.attestationTrusted = attestationTrusted();
+ +549 + + + + + + +
    }
+ +550 + + + + + + +
+ +551 + + + + + + +
    @Override
+ +552 + + + + + + +
    public void validate() {
+ +553 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +554 + + +2 + +1. validate : negated conditional → KILLED
+2. validate : negated conditional → KILLED
+ +
+
+
          allowUntrustedAttestation || attestationTrusted,
+ +555 + + + + + + +
          "Failed to derive trust for attestation key.");
+ +556 + + + + + + +
    }
+ +557 + + + + + + +
+ +558 + + + + + + +
    @Override
+ +559 + + + + + + +
    public Step22 nextStep() {
+ +560 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step21::nextStep → KILLED
+ +
+
+
      return new Step22(attestationType, attestationTrusted, attestationTrustPath);
+ +561 + + + + + + +
    }
+ +562 + + + + + + +
+ +563 + + + + + + +
    public boolean attestationTrusted() {
+ +564 + + +2 + +1. attestationTrusted : negated conditional → KILLED
+2. attestationTrusted : negated conditional → KILLED
+ +
+
+
      if (attestationTrustPath.isPresent() && attestationTrustSource.isPresent()) {
+ +565 + + + + + + +
        try {
+ +566 + + +2 + +1. attestationTrusted : negated conditional → KILLED
+2. attestationTrusted : negated conditional → KILLED
+ +
+
+
          if (!trustRoots.isPresent() || trustRoots.get().getTrustRoots().isEmpty()) {
+ +567 + + +1 + +1. attestationTrusted : replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → KILLED
+ +
+
+
            return false;
+ +568 + + + + + + +
+ +569 + + + + + + +
          } else {
+ +570 + + + + + + +
            final CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+ +571 + + + + + + +
            final CertPathValidator cpv = CertPathValidator.getInstance("PKIX");
+ +572 + + + + + + +
            final CertPath certPath = certFactory.generateCertPath(attestationTrustPath.get());
+ +573 + + + + + + +
            final PKIXParameters pathParams =
+ +574 + + + + + + +
                new PKIXParameters(
+ +575 + + + + + + +
                    trustRoots.get().getTrustRoots().stream()
+ +576 + + +1 + +1. lambda$attestationTrusted$0 : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$0 → KILLED
+ +
+
+
                        .map(rootCert -> new TrustAnchor(rootCert, null))
+ +577 + + + + + + +
                        .collect(Collectors.toSet()));
+ +578 + + +1 + +1. attestationTrusted : removed call to java/security/cert/PKIXParameters::setDate → KILLED
+ +
+
+
            pathParams.setDate(Date.from(clock.instant()));
+ +579 + + +1 + +1. attestationTrusted : removed call to java/security/cert/PKIXParameters::setRevocationEnabled → KILLED
+ +
+
+
            pathParams.setRevocationEnabled(trustRoots.get().isEnableRevocationChecking());
+ +580 + + +1 + +1. attestationTrusted : removed call to java/security/cert/PKIXParameters::setPolicyQualifiersRejected → SURVIVED
+ +
+
+
            pathParams.setPolicyQualifiersRejected(
+ +581 + + +1 + +1. attestationTrusted : negated conditional → SURVIVED
+ +
+
+
                !trustRoots.get().getPolicyTreeValidator().isPresent());
+ +582 + + +1 + +1. attestationTrusted : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
            trustRoots.get().getCertStore().ifPresent(pathParams::addCertStore);
+ +583 + + + + + + +
            final PKIXCertPathValidatorResult result =
+ +584 + + + + + + +
                (PKIXCertPathValidatorResult) cpv.validate(certPath, pathParams);
+ +585 + + +2 + +1. attestationTrusted : replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → KILLED
+2. attestationTrusted : replaced boolean return with false for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → KILLED
+ +
+
+
            return trustRoots
+ +586 + + + + + + +
                .get()
+ +587 + + + + + + +
                .getPolicyTreeValidator()
+ +588 + + + + + + +
                .map(
+ +589 + + + + + + +
                    policyNodePredicate -> {
+ +590 + + +1 + +1. lambda$attestationTrusted$1 : negated conditional → KILLED
+ +
+
+
                      if (policyNodePredicate.test(result.getPolicyTree())) {
+ +591 + + +1 + +1. lambda$attestationTrusted$1 : replaced Boolean return with False for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$1 → KILLED
+ +
+
+
                        return true;
+ +592 + + + + + + +
                      } else {
+ +593 + + + + + + +
                        log.info(
+ +594 + + + + + + +
                            "Failed to derive trust in attestation statement: Certificate path policy tree does not satisfy policy tree validator. Attestation object: {}",
+ +595 + + + + + + +
                            response.getResponse().getAttestationObject());
+ +596 + + +1 + +1. lambda$attestationTrusted$1 : replaced Boolean return with True for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$1 → KILLED
+ +
+
+
                        return false;
+ +597 + + + + + + +
                      }
+ +598 + + + + + + +
                    })
+ +599 + + + + + + +
                .orElse(true);
+ +600 + + + + + + +
          }
+ +601 + + + + + + +
+ +602 + + + + + + +
        } catch (CertPathValidatorException e) {
+ +603 + + + + + + +
          log.info(
+ +604 + + + + + + +
              "Failed to derive trust in attestation statement: {} at cert index {}: {}. Attestation object: {}",
+ +605 + + + + + + +
              e.getReason(),
+ +606 + + + + + + +
              e.getIndex(),
+ +607 + + + + + + +
              e.getMessage(),
+ +608 + + + + + + +
              response.getResponse().getAttestationObject());
+ +609 + + +1 + +1. attestationTrusted : negated conditional → SURVIVED
+ +
+
+
          if (PKIXReason.INVALID_POLICY.equals(e.getReason())) {
+ +610 + + + + + + +
            log.info(
+ +611 + + + + + + +
                "You may need to set the policyTreeValidator property on the {} returned by your {}.",
+ +612 + + + + + + +
                TrustRootsResult.class.getSimpleName(),
+ +613 + + + + + + +
                AttestationTrustSource.class.getSimpleName());
+ +614 + + + + + + +
          }
+ +615 + + +1 + +1. attestationTrusted : replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → SURVIVED
+ +
+
+
          return false;
+ +616 + + + + + + +
+ +617 + + + + + + +
        } catch (CertificateException e) {
+ +618 + + + + + + +
          log.warn(
+ +619 + + + + + + +
              "Failed to build attestation certificate path. Attestation object: {}",
+ +620 + + + + + + +
              response.getResponse().getAttestationObject(),
+ +621 + + + + + + +
              e);
+ +622 + + +1 + +1. attestationTrusted : replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → NO_COVERAGE
+ +
+
+
          return false;
+ +623 + + + + + + +
+ +624 + + + + + + +
        } catch (NoSuchAlgorithmException e) {
+ +625 + + + + + + +
          throw new RuntimeException(
+ +626 + + + + + + +
              "Failed to check attestation trust path. A JCA provider is likely missing in the runtime environment.",
+ +627 + + + + + + +
              e);
+ +628 + + + + + + +
+ +629 + + + + + + +
        } catch (InvalidAlgorithmParameterException e) {
+ +630 + + + + + + +
          throw new RuntimeException(
+ +631 + + + + + + +
              "Failed to initialize attestation trust path validator. This is likely a bug, please file a bug report.",
+ +632 + + + + + + +
              e);
+ +633 + + + + + + +
        }
+ +634 + + + + + + +
      } else {
+ +635 + + +1 + +1. attestationTrusted : replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → KILLED
+ +
+
+
        return false;
+ +636 + + + + + + +
      }
+ +637 + + + + + + +
    }
+ +638 + + + + + + +
  }
+ +639 + + + + + + +
+ +640 + + + + + + +
  @Value
+ +641 + + + + + + +
  class Step22 implements Step<Finished> {
+ +642 + + + + + + +
    private final AttestationType attestationType;
+ +643 + + + + + + +
    private final boolean attestationTrusted;
+ +644 + + + + + + +
    private final Optional<List<X509Certificate>> attestationTrustPath;
+ +645 + + + + + + +
+ +646 + + + + + + +
    @Override
+ +647 + + + + + + +
    public void validate() {
+ +648 + + +1 + +1. validate : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      assertTrue(
+ +649 + + +1 + +1. validate : negated conditional → KILLED
+ +
+
+
          !credentialRepositoryV2.credentialIdExists(response.getId()),
+ +650 + + + + + + +
          "Credential ID is already registered: %s",
+ +651 + + + + + + +
          response.getId());
+ +652 + + + + + + +
    }
+ +653 + + + + + + +
+ +654 + + + + + + +
    @Override
+ +655 + + + + + + +
    public Finished nextStep() {
+ +656 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step22::nextStep → KILLED
+ +
+
+
      return new Finished(attestationType, attestationTrusted, attestationTrustPath);
+ +657 + + + + + + +
    }
+ +658 + + + + + + +
  }
+ +659 + + + + + + +
+ +660 + + + + + + +
  // Step 23 will be performed externally by library user
+ +661 + + + + + + +
  // Nothing to do for step 24
+ +662 + + + + + + +
+ +663 + + + + + + +
  @Value
+ +664 + + + + + + +
  class Finished implements Step<Finished> {
+ +665 + + + + + + +
    private final AttestationType attestationType;
+ +666 + + + + + + +
    private final boolean attestationTrusted;
+ +667 + + + + + + +
    private final Optional<List<X509Certificate>> attestationTrustPath;
+ +668 + + + + + + +
+ +669 + + + + + + +
    @Override
+ +670 + + + + + + +
    public void validate() {
+ +671 + + + + + + +
      /* No-op */
+ +672 + + + + + + +
    }
+ +673 + + + + + + +
+ +674 + + + + + + +
    @Override
+ +675 + + + + + + +
    public Finished nextStep() {
+ +676 + + +1 + +1. nextStep : replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Finished::nextStep → NO_COVERAGE
+ +
+
+
      return this;
+ +677 + + + + + + +
    }
+ +678 + + + + + + +
+ +679 + + + + + + +
    @Override
+ +680 + + + + + + +
    public Optional<RegistrationResult> result() {
+ +681 + + +1 + +1. result : replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Finished::result → KILLED
+ +
+
+
      return Optional.of(
+ +682 + + + + + + +
          new RegistrationResult(
+ +683 + + + + + + +
              response, attestationTrusted, attestationType, attestationTrustPath));
+ +684 + + + + + + +
    }
+ +685 + + + + + + +
  }
+ +686 + + + + + + +
}

Mutations

94 + + + +

1.1
Location : fromV1
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::fromV1 → KILLED

+
124 + + + +

1.1
Location : begin
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::begin → KILLED

+
128 + + + +

1.1
Location : run
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::run → KILLED

+
141 + + + +

1.1
Location : next
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/webauthn/FinishRegistrationSteps$Step::validate → KILLED

+
142 + + + +

1.1
Location : next
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::next → KILLED

+
146 + + + +

1.1
Location : run
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
147 + + + +

1.1
Location : run
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::run → KILLED

+
149 + + + +

1.1
Location : run
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::run → KILLED

+
162 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
167 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step6::nextStep → KILLED

+
171 + + + +

1.1
Location : clientData
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step6::clientData → KILLED

+
181 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
190 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step7::nextStep → KILLED

+
200 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
205 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step8::nextStep → KILLED

+
216 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
224 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step9::nextStep → KILLED

+
239 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step10::nextStep → KILLED

+
247 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
252 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step11::nextStep → KILLED

+
256 + + + +

1.1
Location : clientDataJsonHash
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step11::clientDataJsonHash → KILLED

+
266 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

2.2
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
271 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step12::nextStep → KILLED

+
275 + + + +

1.1
Location : attestation
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step12::attestation → KILLED

+
286 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
294 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step13::nextStep → KILLED

+
305 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
312 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step14::nextStep → KILLED

+
326 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
328 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
336 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step15::nextStep → KILLED

+
357 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
359 + + + +

1.1
Location : lambda$validate$0
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step16::lambda$validate$0 → KILLED

2.2
Location : lambda$validate$0
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
374 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step16::nextStep → KILLED

+
390 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step18::nextStep → KILLED

+
394 + + + +

1.1
Location : format
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with "" for com/yubico/webauthn/FinishRegistrationSteps$Step18::format → KILLED

+
400 + + + +

1.1
Location : attestationStatementVerifier
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED

+
402 + + + +

1.1
Location : attestationStatementVerifier
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED

+
404 + + + +

1.1
Location : attestationStatementVerifier
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED

+
406 + + + +

1.1
Location : attestationStatementVerifier
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED

+
408 + + + +

1.1
Location : attestationStatementVerifier
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED

+
410 + + + +

1.1
Location : attestationStatementVerifier
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier → KILLED

+
425 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to java/util/Optional::ifPresent → KILLED

+
427 + + + +

1.1
Location : lambda$validate$0
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
432 + + + +

1.1
Location : validate
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
437 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::nextStep → KILLED

+
442 + + + +

1.1
Location : attestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
443 + + + +

1.1
Location : attestationType
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType → KILLED

+
445 + + + +

1.1
Location : attestationType
Killed by : none
negated conditional → SURVIVED

+
448 + + + +

1.1
Location : attestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType → KILLED

+
450 + + + +

1.1
Location : attestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType → KILLED

+
459 + + + +

1.1
Location : attestationTrustPath
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
461 + + + +

1.1
Location : attestationTrustPath
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
463 + + + +

1.1
Location : attestationTrustPath
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationTrustPath → KILLED

+
500 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step20::nextStep → KILLED

+
504 + + + +

1.1
Location : findTrustRoots
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::findTrustRoots → KILLED

+
506 + + + +

1.1
Location : lambda$findTrustRoots$3
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$3 → KILLED

+
508 + + + +

1.1
Location : lambda$findTrustRoots$2
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$2 → KILLED

+
517 + + + +

1.1
Location : lambda$findTrustRoots$0
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : lambda$findTrustRoots$0
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$0 → KILLED

+
519 + + + +

1.1
Location : lambda$findTrustRoots$1
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
520 + + + +

1.1
Location : lambda$findTrustRoots$1
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$1 → KILLED

+
553 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
554 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
560 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step21::nextStep → KILLED

+
564 + + + +

1.1
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
566 + + + +

1.1
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
567 + + + +

1.1
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → KILLED

+
576 + + + +

1.1
Location : lambda$attestationTrusted$0
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$0 → KILLED

+
578 + + + +

1.1
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to java/security/cert/PKIXParameters::setDate → KILLED

+
579 + + + +

1.1
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to java/security/cert/PKIXParameters::setRevocationEnabled → KILLED

+
580 + + + +

1.1
Location : attestationTrusted
Killed by : none
removed call to java/security/cert/PKIXParameters::setPolicyQualifiersRejected → SURVIVED

+
581 + + + +

1.1
Location : attestationTrusted
Killed by : none
negated conditional → SURVIVED

+
582 + + + +

1.1
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to java/util/Optional::ifPresent → KILLED

+
585 + + + +

1.1
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → KILLED

2.2
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → KILLED

+
590 + + + +

1.1
Location : lambda$attestationTrusted$1
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
591 + + + +

1.1
Location : lambda$attestationTrusted$1
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced Boolean return with False for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$1 → KILLED

+
596 + + + +

1.1
Location : lambda$attestationTrusted$1
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced Boolean return with True for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$1 → KILLED

+
609 + + + +

1.1
Location : attestationTrusted
Killed by : none
negated conditional → SURVIVED

+
615 + + + +

1.1
Location : attestationTrusted
Killed by : none
replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → SURVIVED

+
622 + + + +

1.1
Location : attestationTrusted
Killed by : none
replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → NO_COVERAGE

+
635 + + + +

1.1
Location : attestationTrusted
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted → KILLED

+
648 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
649 + + + +

1.1
Location : validate
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
656 + + + +

1.1
Location : nextStep
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step22::nextStep → KILLED

+
676 + + + +

1.1
Location : nextStep
Killed by : none
replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Finished::nextStep → NO_COVERAGE

+
681 + + + +

1.1
Location : result
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Finished::result → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/NoneAttestationStatementVerifier.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/NoneAttestationStatementVerifier.java.html new file mode 100644 index 000000000..77fbc75b4 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/NoneAttestationStatementVerifier.java.html @@ -0,0 +1,718 @@ + + + + + + + + + +

NoneAttestationStatementVerifier.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.webauthn.data.AttestationObject;
+ +28 + + + + + + +
import com.yubico.webauthn.data.AttestationType;
+ +29 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +30 + + + + + + +
+ +31 + + + + + + +
final class NoneAttestationStatementVerifier implements AttestationStatementVerifier {
+ +32 + + + + + + +
+ +33 + + + + + + +
  @Override
+ +34 + + + + + + +
  public AttestationType getAttestationType(AttestationObject attestation) {
+ +35 + + +1 + +1. getAttestationType : replaced return value with null for com/yubico/webauthn/NoneAttestationStatementVerifier::getAttestationType → KILLED
+ +
+
+
    return AttestationType.NONE;
+ +36 + + + + + + +
  }
+ +37 + + + + + + +
+ +38 + + + + + + +
  @Override
+ +39 + + + + + + +
  public boolean verifyAttestationSignature(
+ +40 + + + + + + +
      AttestationObject attestationObject, ByteArray clientDataJsonHash) {
+ +41 + + +1 + +1. verifyAttestationSignature : replaced boolean return with false for com/yubico/webauthn/NoneAttestationStatementVerifier::verifyAttestationSignature → KILLED
+ +
+
+
    return true;
+ +42 + + + + + + +
  }
+ +43 + + + + + + +
}

Mutations

35 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/NoneAttestationStatementVerifier::getAttestationType → KILLED

+
41 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/NoneAttestationStatementVerifier::verifyAttestationSignature → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/OriginMatcher.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/OriginMatcher.java.html new file mode 100644 index 000000000..e1d513adf --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/OriginMatcher.java.html @@ -0,0 +1,1324 @@ + + + + + + + + + +

OriginMatcher.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.webauthn;
+ +2 + + + + + + +
+ +3 + + + + + + +
import java.net.MalformedURLException;
+ +4 + + + + + + +
import java.net.URL;
+ +5 + + + + + + +
import java.util.Set;
+ +6 + + + + + + +
import lombok.experimental.UtilityClass;
+ +7 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +8 + + + + + + +
+ +9 + + + + + + +
@Slf4j
+ +10 + + + + + + +
@UtilityClass
+ +11 + + + + + + +
class OriginMatcher {
+ +12 + + + + + + +
+ +13 + + + + + + +
  static boolean isAllowed(
+ +14 + + + + + + +
      String origin, Set<String> allowedOrigins, boolean allowPort, boolean allowSubdomain) {
+ +15 + + + + + + +
    log.trace("isAllowed({}, {}, {}, {})", origin, allowedOrigins, allowPort, allowSubdomain);
+ +16 + + + + + + +
+ +17 + + + + + + +
    URL tmpOriginUrl;
+ +18 + + + + + + +
    try {
+ +19 + + + + + + +
      tmpOriginUrl = new URL(origin);
+ +20 + + + + + + +
    } catch (MalformedURLException e) {
+ +21 + + + + + + +
      log.debug("Origin in client data is not a valid URL; will only match exactly: {}", origin);
+ +22 + + + + + + +
      tmpOriginUrl = null;
+ +23 + + + + + + +
    }
+ +24 + + + + + + +
    final URL originUrl = tmpOriginUrl;
+ +25 + + + + + + +
+ +26 + + +2 + +1. isAllowed : replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isAllowed → KILLED
+2. isAllowed : replaced boolean return with false for com/yubico/webauthn/OriginMatcher::isAllowed → KILLED
+ +
+
+
    return allowedOrigins.stream()
+ +27 + + + + + + +
        .anyMatch(
+ +28 + + + + + + +
            allowedOriginString -> {
+ +29 + + +1 + +1. lambda$isAllowed$0 : negated conditional → KILLED
+ +
+
+
              if (allowedOriginString.equals(origin)) {
+ +30 + + + + + + +
                log.debug("Exact match: {} == {}", origin, allowedOriginString);
+ +31 + + +1 + +1. lambda$isAllowed$0 : replaced boolean return with false for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 → KILLED
+ +
+
+
                return true;
+ +32 + + +3 + +1. lambda$isAllowed$0 : negated conditional → KILLED
+2. lambda$isAllowed$0 : negated conditional → KILLED
+3. lambda$isAllowed$0 : negated conditional → KILLED
+ +
+
+
              } else if (originUrl != null && (allowPort || allowSubdomain)) {
+ +33 + + + + + + +
                final URL allowedOrigin;
+ +34 + + + + + + +
                try {
+ +35 + + + + + + +
                  allowedOrigin = new URL(allowedOriginString);
+ +36 + + + + + + +
                } catch (MalformedURLException e) {
+ +37 + + + + + + +
                  log.error(
+ +38 + + + + + + +
                      "Allowed origin is not a valid URL; skipping port/subdomain matching: {}",
+ +39 + + + + + + +
                      allowedOriginString);
+ +40 + + +1 + +1. lambda$isAllowed$0 : replaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 → KILLED
+ +
+
+
                  return false;
+ +41 + + + + + + +
                }
+ +42 + + + + + + +
+ +43 + + + + + + +
                final boolean portAccepted = isPortAccepted(allowPort, allowedOrigin, originUrl);
+ +44 + + + + + + +
                final boolean domainAccepted =
+ +45 + + + + + + +
                    isDomainAccepted(allowSubdomain, allowedOrigin, originUrl);
+ +46 + + + + + + +
+ +47 + + + + + + +
                log.debug("portAccepted: {}, domainAccepted: {}", portAccepted, domainAccepted);
+ +48 + + +3 + +1. lambda$isAllowed$0 : negated conditional → KILLED
+2. lambda$isAllowed$0 : negated conditional → KILLED
+3. lambda$isAllowed$0 : replaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 → KILLED
+ +
+
+
                return portAccepted && domainAccepted;
+ +49 + + + + + + +
              } else {
+ +50 + + + + + + +
                log.debug("No match: {} != {}", origin, allowedOriginString);
+ +51 + + +1 + +1. lambda$isAllowed$0 : replaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 → KILLED
+ +
+
+
                return false;
+ +52 + + + + + + +
              }
+ +53 + + + + + + +
            });
+ +54 + + + + + + +
  }
+ +55 + + + + + + +
+ +56 + + + + + + +
  private static boolean isPortAccepted(boolean allowAnyPort, URL allowedOrigin, URL origin) {
+ +57 + + +1 + +1. isPortAccepted : negated conditional → KILLED
+ +
+
+
    if (allowAnyPort) {
+ +58 + + +1 + +1. isPortAccepted : replaced boolean return with false for com/yubico/webauthn/OriginMatcher::isPortAccepted → KILLED
+ +
+
+
      return true;
+ +59 + + + + + + +
    } else {
+ +60 + + +2 + +1. isPortAccepted : replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isPortAccepted → KILLED
+2. isPortAccepted : negated conditional → KILLED
+ +
+
+
      return origin.getPort() == allowedOrigin.getPort();
+ +61 + + + + + + +
    }
+ +62 + + + + + + +
  }
+ +63 + + + + + + +
+ +64 + + + + + + +
  private static boolean isDomainAccepted(boolean allowSubdomain, URL allowedOrigin, URL origin) {
+ +65 + + + + + + +
    final String allowedDomain = allowedOrigin.getHost();
+ +66 + + + + + + +
    final String originDomain = origin.getHost();
+ +67 + + + + + + +
+ +68 + + +1 + +1. isDomainAccepted : negated conditional → KILLED
+ +
+
+
    if (allowSubdomain) {
+ +69 + + +3 + +1. isDomainAccepted : negated conditional → KILLED
+2. isDomainAccepted : replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isDomainAccepted → KILLED
+3. isDomainAccepted : negated conditional → KILLED
+ +
+
+
      return originDomain.equals(allowedDomain) || originDomain.endsWith("." + allowedDomain);
+ +70 + + + + + + +
    } else {
+ +71 + + +2 + +1. isDomainAccepted : replaced boolean return with false for com/yubico/webauthn/OriginMatcher::isDomainAccepted → KILLED
+2. isDomainAccepted : replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isDomainAccepted → KILLED
+ +
+
+
      return originDomain.equals(allowedDomain);
+ +72 + + + + + + +
    }
+ +73 + + + + + + +
  }
+ +74 + + + + + + +
}

Mutations

26 + + + +

1.1
Location : isAllowed
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isAllowed → KILLED

2.2
Location : isAllowed
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with false for com/yubico/webauthn/OriginMatcher::isAllowed → KILLED

+
29 + + + +

1.1
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

+
31 + + + +

1.1
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with false for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 → KILLED

+
32 + + + +

1.1
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

2.2
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

3.3
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

+
40 + + + +

1.1
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 → KILLED

+
48 + + + +

1.1
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

2.2
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

3.3
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 → KILLED

+
51 + + + +

1.1
Location : lambda$isAllowed$0
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 → KILLED

+
57 + + + +

1.1
Location : isPortAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

+
58 + + + +

1.1
Location : isPortAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with false for com/yubico/webauthn/OriginMatcher::isPortAccepted → KILLED

+
60 + + + +

1.1
Location : isPortAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isPortAccepted → KILLED

2.2
Location : isPortAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

+
68 + + + +

1.1
Location : isDomainAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

+
69 + + + +

1.1
Location : isDomainAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

2.2
Location : isDomainAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isDomainAccepted → KILLED

3.3
Location : isDomainAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
negated conditional → KILLED

+
71 + + + +

1.1
Location : isDomainAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with false for com/yubico/webauthn/OriginMatcher::isDomainAccepted → KILLED

2.2
Location : isDomainAccepted
Killed by : com.yubico.webauthn.OriginMatcherSpec
replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isDomainAccepted → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/PackedAttestationStatementVerifier.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/PackedAttestationStatementVerifier.java.html new file mode 100644 index 000000000..866ae6c04 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/PackedAttestationStatementVerifier.java.html @@ -0,0 +1,5070 @@ + + + + + + + + + +

PackedAttestationStatementVerifier.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import COSE.CoseException;
+ +28 + + + + + + +
import com.fasterxml.jackson.databind.JsonNode;
+ +29 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +30 + + + + + + +
import com.yubico.internal.util.CertificateParser;
+ +31 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +32 + + + + + + +
import com.yubico.internal.util.ExceptionUtil;
+ +33 + + + + + + +
import com.yubico.webauthn.data.AttestationObject;
+ +34 + + + + + + +
import com.yubico.webauthn.data.AttestationType;
+ +35 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +36 + + + + + + +
import com.yubico.webauthn.data.COSEAlgorithmIdentifier;
+ +37 + + + + + + +
import java.io.IOException;
+ +38 + + + + + + +
import java.security.InvalidKeyException;
+ +39 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +40 + + + + + + +
import java.security.PublicKey;
+ +41 + + + + + + +
import java.security.Signature;
+ +42 + + + + + + +
import java.security.SignatureException;
+ +43 + + + + + + +
import java.security.cert.CertificateException;
+ +44 + + + + + + +
import java.security.cert.X509Certificate;
+ +45 + + + + + + +
import java.security.spec.InvalidKeySpecException;
+ +46 + + + + + + +
import java.util.Arrays;
+ +47 + + + + + + +
import java.util.HashSet;
+ +48 + + + + + + +
import java.util.Locale;
+ +49 + + + + + + +
import java.util.Objects;
+ +50 + + + + + + +
import java.util.Optional;
+ +51 + + + + + + +
import java.util.Set;
+ +52 + + + + + + +
import javax.naming.InvalidNameException;
+ +53 + + + + + + +
import javax.naming.ldap.LdapName;
+ +54 + + + + + + +
import javax.naming.ldap.Rdn;
+ +55 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +56 + + + + + + +
import lombok.val;
+ +57 + + + + + + +
+ +58 + + + + + + +
@Slf4j
+ +59 + + + + + + +
final class PackedAttestationStatementVerifier
+ +60 + + + + + + +
    implements AttestationStatementVerifier, X5cAttestationStatementVerifier {
+ +61 + + + + + + +
+ +62 + + + + + + +
  @Override
+ +63 + + + + + + +
  public AttestationType getAttestationType(AttestationObject attestation) {
+ +64 + + +1 + +1. getAttestationType : negated conditional → KILLED
+ +
+
+
    if (attestation.getAttestationStatement().hasNonNull("x5c")) {
+ +65 + + +1 + +1. getAttestationType : replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::getAttestationType → KILLED
+ +
+
+
      return AttestationType.BASIC;
+ +66 + + + + + + +
    } else {
+ +67 + + +1 + +1. getAttestationType : replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::getAttestationType → KILLED
+ +
+
+
      return AttestationType.SELF_ATTESTATION;
+ +68 + + + + + + +
    }
+ +69 + + + + + + +
  }
+ +70 + + + + + + +
+ +71 + + + + + + +
  @Override
+ +72 + + + + + + +
  public boolean verifyAttestationSignature(
+ +73 + + + + + + +
      AttestationObject attestationObject, ByteArray clientDataJsonHash) {
+ +74 + + + + + + +
    val signatureNode = attestationObject.getAttestationStatement().get("sig");
+ +75 + + + + + + +
+ +76 + + +2 + +1. verifyAttestationSignature : negated conditional → KILLED
+2. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    if (signatureNode == null || !signatureNode.isBinary()) {
+ +77 + + + + + + +
      throw new IllegalArgumentException("attStmt.sig must be set to a binary value.");
+ +78 + + + + + + +
    }
+ +79 + + + + + + +
+ +80 + + +1 + +1. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    if (attestationObject.getAttestationStatement().has("x5c")) {
+ +81 + + +2 + +1. verifyAttestationSignature : replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature → KILLED
+2. verifyAttestationSignature : replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature → KILLED
+ +
+
+
      return verifyX5cSignature(attestationObject, clientDataJsonHash);
+ +82 + + + + + + +
    } else {
+ +83 + + +2 + +1. verifyAttestationSignature : replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature → KILLED
+2. verifyAttestationSignature : replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature → KILLED
+ +
+
+
      return verifySelfAttestationSignature(attestationObject, clientDataJsonHash);
+ +84 + + + + + + +
    }
+ +85 + + + + + + +
  }
+ +86 + + + + + + +
+ +87 + + + + + + +
  private boolean verifySelfAttestationSignature(
+ +88 + + + + + + +
      AttestationObject attestationObject, ByteArray clientDataJsonHash) {
+ +89 + + + + + + +
    final PublicKey pubkey;
+ +90 + + + + + + +
    try {
+ +91 + + + + + + +
      pubkey =
+ +92 + + + + + + +
          WebAuthnCodecs.importCosePublicKey(
+ +93 + + + + + + +
              attestationObject
+ +94 + + + + + + +
                  .getAuthenticatorData()
+ +95 + + + + + + +
                  .getAttestedCredentialData()
+ +96 + + + + + + +
                  .get()
+ +97 + + + + + + +
                  .getCredentialPublicKey());
+ +98 + + + + + + +
    } catch (IOException | CoseException | InvalidKeySpecException e) {
+ +99 + + + + + + +
      throw ExceptionUtil.wrapAndLog(
+ +100 + + + + + + +
          log,
+ +101 + + + + + + +
          String.format(
+ +102 + + + + + + +
              "Failed to parse public key from attestation data %s",
+ +103 + + + + + + +
              attestationObject.getAuthenticatorData().getAttestedCredentialData()),
+ +104 + + + + + + +
          e);
+ +105 + + + + + + +
    } catch (NoSuchAlgorithmException e) {
+ +106 + + + + + + +
      throw new RuntimeException(e);
+ +107 + + + + + + +
    }
+ +108 + + + + + + +
+ +109 + + + + + + +
    final long keyAlgId =
+ +110 + + + + + + +
        CBORObject.DecodeFromBytes(
+ +111 + + + + + + +
                attestationObject
+ +112 + + + + + + +
                    .getAuthenticatorData()
+ +113 + + + + + + +
                    .getAttestedCredentialData()
+ +114 + + + + + + +
                    .get()
+ +115 + + + + + + +
                    .getCredentialPublicKey()
+ +116 + + + + + + +
                    .getBytes())
+ +117 + + + + + + +
            .get(CBORObject.FromObject(3))
+ +118 + + + + + + +
            .AsNumber()
+ +119 + + + + + + +
            .ToInt64IfExact();
+ +120 + + + + + + +
    final COSEAlgorithmIdentifier keyAlg =
+ +121 + + + + + + +
        COSEAlgorithmIdentifier.fromId(keyAlgId)
+ +122 + + + + + + +
            .orElseThrow(
+ +123 + + + + + + +
                () ->
+ +124 + + +1 + +1. lambda$verifySelfAttestationSignature$0 : replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifySelfAttestationSignature$0 → NO_COVERAGE
+ +
+
+
                    new IllegalArgumentException(
+ +125 + + + + + + +
                        "Unsupported COSE algorithm identifier: " + keyAlgId));
+ +126 + + + + + + +
+ +127 + + + + + + +
    final long sigAlgId = attestationObject.getAttestationStatement().get("alg").asLong();
+ +128 + + + + + + +
    final COSEAlgorithmIdentifier sigAlg =
+ +129 + + + + + + +
        COSEAlgorithmIdentifier.fromId(sigAlgId)
+ +130 + + + + + + +
            .orElseThrow(
+ +131 + + + + + + +
                () ->
+ +132 + + +1 + +1. lambda$verifySelfAttestationSignature$1 : replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifySelfAttestationSignature$1 → NO_COVERAGE
+ +
+
+
                    new IllegalArgumentException(
+ +133 + + + + + + +
                        "Unsupported COSE algorithm identifier: " + sigAlgId));
+ +134 + + + + + + +
+ +135 + + +1 + +1. verifySelfAttestationSignature : negated conditional → KILLED
+ +
+
+
    if (!Objects.equals(keyAlg, sigAlg)) {
+ +136 + + + + + + +
      throw new IllegalArgumentException(
+ +137 + + + + + + +
          String.format(
+ +138 + + + + + + +
              "Key algorithm and signature algorithm must be equal, was: Key: %s, Sig: %s",
+ +139 + + + + + + +
              keyAlg, sigAlg));
+ +140 + + + + + + +
    }
+ +141 + + + + + + +
+ +142 + + + + + + +
    ByteArray signedData =
+ +143 + + + + + + +
        attestationObject.getAuthenticatorData().getBytes().concat(clientDataJsonHash);
+ +144 + + + + + + +
    ByteArray signature;
+ +145 + + + + + + +
    try {
+ +146 + + + + + + +
      signature =
+ +147 + + + + + + +
          new ByteArray(attestationObject.getAttestationStatement().get("sig").binaryValue());
+ +148 + + + + + + +
    } catch (IOException e) {
+ +149 + + + + + + +
      throw ExceptionUtil.wrapAndLog(log, ".binaryValue() of \"sig\" failed", e);
+ +150 + + + + + + +
    }
+ +151 + + + + + + +
+ +152 + + +2 + +1. verifySelfAttestationSignature : replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifySelfAttestationSignature → KILLED
+2. verifySelfAttestationSignature : replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifySelfAttestationSignature → KILLED
+ +
+
+
    return Crypto.verifySignature(pubkey, signedData, signature, keyAlg);
+ +153 + + + + + + +
  }
+ +154 + + + + + + +
+ +155 + + + + + + +
  private boolean verifyX5cSignature(
+ +156 + + + + + + +
      AttestationObject attestationObject, ByteArray clientDataHash) {
+ +157 + + + + + + +
    final Optional<X509Certificate> attestationCert;
+ +158 + + + + + + +
    try {
+ +159 + + + + + + +
      attestationCert = getX5cAttestationCertificate(attestationObject);
+ +160 + + + + + + +
    } catch (CertificateException e) {
+ +161 + + + + + + +
      throw ExceptionUtil.wrapAndLog(
+ +162 + + + + + + +
          log,
+ +163 + + + + + + +
          String.format(
+ +164 + + + + + + +
              "Failed to parse X.509 certificate from attestation object: %s", attestationObject),
+ +165 + + + + + + +
          e);
+ +166 + + + + + + +
    }
+ +167 + + +2 + +1. verifyX5cSignature : replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cSignature → KILLED
+2. verifyX5cSignature : replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cSignature → KILLED
+ +
+
+
    return attestationCert
+ +168 + + + + + + +
        .map(
+ +169 + + + + + + +
            attestationCertificate -> {
+ +170 + + + + + + +
              JsonNode signatureNode = attestationObject.getAttestationStatement().get("sig");
+ +171 + + +1 + +1. lambda$verifyX5cSignature$3 : negated conditional → KILLED
+ +
+
+
              if (signatureNode == null) {
+ +172 + + + + + + +
                throw new IllegalArgumentException(
+ +173 + + + + + + +
                    "Packed attestation statement must have field \"sig\".");
+ +174 + + + + + + +
              }
+ +175 + + + + + + +
+ +176 + + +1 + +1. lambda$verifyX5cSignature$3 : negated conditional → KILLED
+ +
+
+
              if (signatureNode.isBinary()) {
+ +177 + + + + + + +
                ByteArray signature;
+ +178 + + + + + + +
                try {
+ +179 + + + + + + +
                  signature = new ByteArray(signatureNode.binaryValue());
+ +180 + + + + + + +
                } catch (IOException e) {
+ +181 + + + + + + +
                  throw ExceptionUtil.wrapAndLog(
+ +182 + + + + + + +
                      log,
+ +183 + + + + + + +
                      "signatureNode.isBinary() was true but signatureNode.binaryValue() failed",
+ +184 + + + + + + +
                      e);
+ +185 + + + + + + +
                }
+ +186 + + + + + + +
+ +187 + + + + + + +
                JsonNode algNode = attestationObject.getAttestationStatement().get("alg");
+ +188 + + +1 + +1. lambda$verifyX5cSignature$3 : negated conditional → KILLED
+ +
+
+
                if (algNode == null) {
+ +189 + + + + + + +
                  throw new IllegalArgumentException(
+ +190 + + + + + + +
                      "Packed attestation statement must have field \"alg\".");
+ +191 + + + + + + +
                }
+ +192 + + +1 + +1. lambda$verifyX5cSignature$3 : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+ +
+
+
                ExceptionUtil.assertTrue(
+ +193 + + + + + + +
                    algNode.isIntegralNumber(),
+ +194 + + + + + + +
                    "Field \"alg\" in packed attestation statement must be a COSEAlgorithmIdentifier.");
+ +195 + + + + + + +
                final Long sigAlgId = algNode.asLong();
+ +196 + + + + + + +
                final COSEAlgorithmIdentifier sigAlg =
+ +197 + + + + + + +
                    COSEAlgorithmIdentifier.fromId(sigAlgId)
+ +198 + + + + + + +
                        .orElseThrow(
+ +199 + + + + + + +
                            () ->
+ +200 + + +1 + +1. lambda$verifyX5cSignature$2 : replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$2 → NO_COVERAGE
+ +
+
+
                                new IllegalArgumentException(
+ +201 + + + + + + +
                                    "Unsupported COSE algorithm identifier: " + sigAlgId));
+ +202 + + + + + + +
+ +203 + + + + + + +
                ByteArray signedData =
+ +204 + + + + + + +
                    attestationObject.getAuthenticatorData().getBytes().concat(clientDataHash);
+ +205 + + + + + + +
+ +206 + + + + + + +
                final String signatureAlgorithmName = WebAuthnCodecs.getJavaAlgorithmName(sigAlg);
+ +207 + + + + + + +
                Signature signatureVerifier;
+ +208 + + + + + + +
                try {
+ +209 + + + + + + +
                  signatureVerifier = Signature.getInstance(signatureAlgorithmName);
+ +210 + + + + + + +
                } catch (NoSuchAlgorithmException e) {
+ +211 + + + + + + +
                  throw ExceptionUtil.wrapAndLog(
+ +212 + + + + + + +
                      log, "Failed to get a Signature instance for " + signatureAlgorithmName, e);
+ +213 + + + + + + +
                }
+ +214 + + + + + + +
                try {
+ +215 + + +1 + +1. lambda$verifyX5cSignature$3 : removed call to java/security/Signature::initVerify → KILLED
+ +
+
+
                  signatureVerifier.initVerify(attestationCertificate.getPublicKey());
+ +216 + + + + + + +
                } catch (InvalidKeyException e) {
+ +217 + + + + + + +
                  throw ExceptionUtil.wrapAndLog(
+ +218 + + + + + + +
                      log, "Attestation key is invalid: " + attestationCertificate, e);
+ +219 + + + + + + +
                }
+ +220 + + + + + + +
                try {
+ +221 + + +1 + +1. lambda$verifyX5cSignature$3 : removed call to java/security/Signature::update → KILLED
+ +
+
+
                  signatureVerifier.update(signedData.getBytes());
+ +222 + + + + + + +
                } catch (SignatureException e) {
+ +223 + + + + + + +
                  throw ExceptionUtil.wrapAndLog(
+ +224 + + + + + + +
                      log, "Signature object in invalid state: " + signatureVerifier, e);
+ +225 + + + + + + +
                }
+ +226 + + + + + + +
+ +227 + + + + + + +
                try {
+ +228 + + +2 + +1. lambda$verifyX5cSignature$3 : negated conditional → KILLED
+2. lambda$verifyX5cSignature$3 : replaced Boolean return with True for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$3 → KILLED
+ +
+
+
                  return (signatureVerifier.verify(signature.getBytes())
+ +229 + + +1 + +1. lambda$verifyX5cSignature$3 : negated conditional → KILLED
+ +
+
+
                      && verifyX5cRequirements(
+ +230 + + + + + + +
                          attestationCertificate,
+ +231 + + + + + + +
                          attestationObject
+ +232 + + + + + + +
                              .getAuthenticatorData()
+ +233 + + + + + + +
                              .getAttestedCredentialData()
+ +234 + + + + + + +
                              .get()
+ +235 + + + + + + +
                              .getAaguid()));
+ +236 + + + + + + +
                } catch (SignatureException e) {
+ +237 + + + + + + +
                  throw ExceptionUtil.wrapAndLog(
+ +238 + + + + + + +
                      log, "Failed to verify signature: " + attestationObject, e);
+ +239 + + + + + + +
                }
+ +240 + + + + + + +
              } else {
+ +241 + + + + + + +
                throw new IllegalArgumentException(
+ +242 + + + + + + +
                    "Field \"sig\" in packed attestation statement must be a binary value.");
+ +243 + + + + + + +
              }
+ +244 + + + + + + +
            })
+ +245 + + + + + + +
        .orElseThrow(
+ +246 + + + + + + +
            () ->
+ +247 + + +1 + +1. lambda$verifyX5cSignature$4 : replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$4 → NO_COVERAGE
+ +
+
+
                new IllegalArgumentException(
+ +248 + + + + + + +
                    "If \"x5c\" property is present in \"packed\" attestation format it must be an array containing at least one DER encoded X.509 cerficicate."));
+ +249 + + + + + + +
  }
+ +250 + + + + + + +
+ +251 + + + + + + +
  private Optional<Object> getDnField(String field, X509Certificate cert) {
+ +252 + + + + + + +
    final LdapName ldap;
+ +253 + + + + + + +
    try {
+ +254 + + + + + + +
      ldap = new LdapName(cert.getSubjectX500Principal().getName());
+ +255 + + + + + + +
    } catch (InvalidNameException e) {
+ +256 + + + + + + +
      throw ExceptionUtil.wrapAndLog(
+ +257 + + + + + + +
          log,
+ +258 + + + + + + +
          "X500Principal name was not accepted as an LdapName: "
+ +259 + + + + + + +
              + cert.getSubjectX500Principal().getName(),
+ +260 + + + + + + +
          e);
+ +261 + + + + + + +
    }
+ +262 + + +1 + +1. getDnField : replaced return value with Optional.empty for com/yubico/webauthn/PackedAttestationStatementVerifier::getDnField → KILLED
+ +
+
+
    return ldap.getRdns().stream()
+ +263 + + +2 + +1. lambda$getDnField$5 : replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$getDnField$5 → KILLED
+2. lambda$getDnField$5 : replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$getDnField$5 → KILLED
+ +
+
+
        .filter(rdn -> Objects.equals(rdn.getType(), field))
+ +264 + + + + + + +
        .findAny()
+ +265 + + + + + + +
        .map(Rdn::getValue);
+ +266 + + + + + + +
  }
+ +267 + + + + + + +
+ +268 + + + + + + +
  public boolean verifyX5cRequirements(X509Certificate cert, ByteArray aaguid) {
+ +269 + + +1 + +1. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
    if (cert.getVersion() != 3) {
+ +270 + + + + + + +
      throw new IllegalArgumentException(
+ +271 + + + + + + +
          String.format(
+ +272 + + + + + + +
              "Wrong attestation certificate X509 version: %s, expected: 3", cert.getVersion()));
+ +273 + + + + + + +
    }
+ +274 + + + + + + +
+ +275 + + + + + + +
    final String ouValue = "Authenticator Attestation";
+ +276 + + + + + + +
    final Set<String> countries =
+ +277 + + + + + + +
        CollectionUtil.immutableSet(new HashSet<>(Arrays.asList(Locale.getISOCountries())));
+ +278 + + + + + + +
+ +279 + + +1 + +1. verifyX5cRequirements : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +280 + + + + + + +
        getDnField("C", cert).filter(countries::contains).isPresent(),
+ +281 + + + + + + +
        "Invalid attestation certificate country code: %s",
+ +282 + + + + + + +
        getDnField("C", cert));
+ +283 + + + + + + +
+ +284 + + +1 + +1. verifyX5cRequirements : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +285 + + +2 + +1. lambda$verifyX5cRequirements$6 : replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cRequirements$6 → SURVIVED
+2. lambda$verifyX5cRequirements$6 : negated conditional → KILLED
+ +
+
+
        getDnField("O", cert).filter(o -> !((String) o).isEmpty()).isPresent(),
+ +286 + + + + + + +
        "Organization (O) field of attestation certificate DN must be present.");
+ +287 + + + + + + +
+ +288 + + +1 + +1. verifyX5cRequirements : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +289 + + + + + + +
        getDnField("OU", cert).filter(ouValue::equals).isPresent(),
+ +290 + + + + + + +
        "Organization Unit (OU) field of attestation certificate DN must be exactly \"%s\", was: %s",
+ +291 + + + + + + +
        ouValue,
+ +292 + + + + + + +
        getDnField("OU", cert));
+ +293 + + + + + + +
+ +294 + + + + + + +
    CertificateParser.parseFidoAaguidExtension(cert)
+ +295 + + +1 + +1. verifyX5cRequirements : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
        .ifPresent(
+ +296 + + + + + + +
            extensionAaguid -> {
+ +297 + + +1 + +1. lambda$verifyX5cRequirements$7 : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
              ExceptionUtil.assertTrue(
+ +298 + + + + + + +
                  Arrays.equals(aaguid.getBytes(), extensionAaguid),
+ +299 + + + + + + +
                  "X.509 extension \"id-fido-gen-ce-aaguid\" is present but does not match the authenticator AAGUID.");
+ +300 + + + + + + +
            });
+ +301 + + + + + + +
+ +302 + + +1 + +1. verifyX5cRequirements : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +303 + + +1 + +1. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
        cert.getBasicConstraints() == -1, "Attestation certificate must not be a CA certificate.");
+ +304 + + + + + + +
+ +305 + + +1 + +1. verifyX5cRequirements : replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cRequirements → KILLED
+ +
+
+
    return true;
+ +306 + + + + + + +
  }
+ +307 + + + + + + +
}

Mutations

64 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
65 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::getAttestationType → KILLED

+
67 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::getAttestationType → KILLED

+
76 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
80 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
81 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature → KILLED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature → KILLED

+
83 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature → KILLED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature → KILLED

+
124 + + + +

1.1
Location : lambda$verifySelfAttestationSignature$0
Killed by : none
replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifySelfAttestationSignature$0 → NO_COVERAGE

+
132 + + + +

1.1
Location : lambda$verifySelfAttestationSignature$1
Killed by : none
replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifySelfAttestationSignature$1 → NO_COVERAGE

+
135 + + + +

1.1
Location : verifySelfAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
152 + + + +

1.1
Location : verifySelfAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifySelfAttestationSignature → KILLED

2.2
Location : verifySelfAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifySelfAttestationSignature → KILLED

+
167 + + + +

1.1
Location : verifyX5cSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cSignature → KILLED

2.2
Location : verifyX5cSignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cSignature → KILLED

+
171 + + + +

1.1
Location : lambda$verifyX5cSignature$3
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
176 + + + +

1.1
Location : lambda$verifyX5cSignature$3
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
188 + + + +

1.1
Location : lambda$verifyX5cSignature$3
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
192 + + + +

1.1
Location : lambda$verifyX5cSignature$3
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
200 + + + +

1.1
Location : lambda$verifyX5cSignature$2
Killed by : none
replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$2 → NO_COVERAGE

+
215 + + + +

1.1
Location : lambda$verifyX5cSignature$3
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
removed call to java/security/Signature::initVerify → KILLED

+
221 + + + +

1.1
Location : lambda$verifyX5cSignature$3
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
removed call to java/security/Signature::update → KILLED

+
228 + + + +

1.1
Location : lambda$verifyX5cSignature$3
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

2.2
Location : lambda$verifyX5cSignature$3
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced Boolean return with True for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$3 → KILLED

+
229 + + + +

1.1
Location : lambda$verifyX5cSignature$3
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
247 + + + +

1.1
Location : lambda$verifyX5cSignature$4
Killed by : none
replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$4 → NO_COVERAGE

+
262 + + + +

1.1
Location : getDnField
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with Optional.empty for com/yubico/webauthn/PackedAttestationStatementVerifier::getDnField → KILLED

+
263 + + + +

1.1
Location : lambda$getDnField$5
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$getDnField$5 → KILLED

2.2
Location : lambda$getDnField$5
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$getDnField$5 → KILLED

+
269 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
279 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
284 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
285 + + + +

1.1
Location : lambda$verifyX5cRequirements$6
Killed by : none
replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cRequirements$6 → SURVIVED

2.2
Location : lambda$verifyX5cRequirements$6
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
288 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
295 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to java/util/Optional::ifPresent → KILLED

+
297 + + + +

1.1
Location : lambda$verifyX5cRequirements$7
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
302 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
303 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
305 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cRequirements → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RegisteredCredential.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RegisteredCredential.java.html new file mode 100644 index 000000000..02ff60d14 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RegisteredCredential.java.html @@ -0,0 +1,6709 @@ + + + + + + + + + +

RegisteredCredential.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import COSE.CoseException;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonAlias;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +30 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnore;
+ +31 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +32 + + + + + + +
import com.yubico.webauthn.data.AttestedCredentialData;
+ +33 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAssertionResponse;
+ +34 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAttestationResponse;
+ +35 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorData;
+ +36 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorTransport;
+ +37 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +38 + + + + + + +
import com.yubico.webauthn.data.COSEAlgorithmIdentifier;
+ +39 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions;
+ +40 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialDescriptor;
+ +41 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialRequestOptions;
+ +42 + + + + + + +
import com.yubico.webauthn.data.UserIdentity;
+ +43 + + + + + + +
import java.io.IOException;
+ +44 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +45 + + + + + + +
import java.security.PublicKey;
+ +46 + + + + + + +
import java.security.spec.InvalidKeySpecException;
+ +47 + + + + + + +
import java.util.Optional;
+ +48 + + + + + + +
import java.util.Set;
+ +49 + + + + + + +
import lombok.AccessLevel;
+ +50 + + + + + + +
import lombok.Builder;
+ +51 + + + + + + +
import lombok.Getter;
+ +52 + + + + + + +
import lombok.NonNull;
+ +53 + + + + + + +
import lombok.Value;
+ +54 + + + + + + +
+ +55 + + + + + + +
/**
+ +56 + + + + + + +
 * An abstraction of a credential registered to a particular user.
+ +57 + + + + + + +
 *
+ +58 + + + + + + +
 * <p>Instances of this class are not expected to be long-lived, and the library only needs to read
+ +59 + + + + + + +
 * them, never write them. You may at your discretion store them directly in your database, or
+ +60 + + + + + + +
 * assemble them from other components.
+ +61 + + + + + + +
 */
+ +62 + + + + + + +
@Value
+ +63 + + + + + + +
@Builder(toBuilder = true)
+ +64 + + + + + + +
public final class RegisteredCredential implements CredentialRecord {
+ +65 + + + + + + +
+ +66 + + + + + + +
  /**
+ +67 + + + + + + +
   * The <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#credential-id">credential
+ +68 + + + + + + +
   * ID</a> of the credential.
+ +69 + + + + + + +
   *
+ +70 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#credential-id">Credential
+ +71 + + + + + + +
   *     ID</a>
+ +72 + + + + + + +
   * @see RegistrationResult#getKeyId()
+ +73 + + + + + + +
   * @see PublicKeyCredentialDescriptor#getId()
+ +74 + + + + + + +
   */
+ +75 + + + + + + +
  @NonNull private final ByteArray credentialId;
+ +76 + + + + + + +
+ +77 + + + + + + +
  /**
+ +78 + + + + + + +
   * The <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-handle">user handle</a>
+ +79 + + + + + + +
   * of the user the credential is registered to.
+ +80 + + + + + + +
   *
+ +81 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-handle">User Handle</a>
+ +82 + + + + + + +
   * @see UserIdentity#getId()
+ +83 + + + + + + +
   */
+ +84 + + + + + + +
  @NonNull private final ByteArray userHandle;
+ +85 + + + + + + +
+ +86 + + + + + + +
  /**
+ +87 + + + + + + +
   * The credential public key encoded in COSE_Key format, as defined in Section 7 of <a
+ +88 + + + + + + +
   * href="https://tools.ietf.org/html/rfc8152">RFC 8152</a>.
+ +89 + + + + + + +
   *
+ +90 + + + + + + +
   * <p>This is used to verify the {@link AuthenticatorAssertionResponse#getSignature() signature}
+ +91 + + + + + + +
   * in authentication assertions.
+ +92 + + + + + + +
   *
+ +93 + + + + + + +
   * @see AttestedCredentialData#getCredentialPublicKey()
+ +94 + + + + + + +
   * @see RegistrationResult#getPublicKeyCose()
+ +95 + + + + + + +
   */
+ +96 + + + + + + +
  @NonNull private final ByteArray publicKeyCose;
+ +97 + + + + + + +
+ +98 + + + + + + +
  /**
+ +99 + + + + + + +
   * The public key of the credential, parsed as a {@link PublicKey} object.
+ +100 + + + + + + +
   *
+ +101 + + + + + + +
   * @see #getPublicKeyCose()
+ +102 + + + + + + +
   * @see RegistrationResult#getParsedPublicKey()
+ +103 + + + + + + +
   */
+ +104 + + + + + + +
  @NonNull
+ +105 + + + + + + +
  @JsonIgnore
+ +106 + + + + + + +
  public PublicKey getParsedPublicKey()
+ +107 + + + + + + +
      throws InvalidKeySpecException, NoSuchAlgorithmException, CoseException, IOException {
+ +108 + + +1 + +1. getParsedPublicKey : replaced return value with null for com/yubico/webauthn/RegisteredCredential::getParsedPublicKey → NO_COVERAGE
+ +
+
+
    return WebAuthnCodecs.importCosePublicKey(getPublicKeyCose());
+ +109 + + + + + + +
  }
+ +110 + + + + + + +
+ +111 + + + + + + +
  /**
+ +112 + + + + + + +
   * The stored <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#signcount">signature
+ +113 + + + + + + +
   * count</a> of the credential.
+ +114 + + + + + + +
   *
+ +115 + + + + + + +
   * <p>This is used to validate the {@link AuthenticatorData#getSignatureCounter() signature
+ +116 + + + + + + +
   * counter} in authentication assertions.
+ +117 + + + + + + +
   *
+ +118 + + + + + + +
   * @see <a
+ +119 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-data">§6.1.
+ +120 + + + + + + +
   *     Authenticator Data</a>
+ +121 + + + + + + +
   * @see AuthenticatorData#getSignatureCounter()
+ +122 + + + + + + +
   * @see AssertionResult#getSignatureCount()
+ +123 + + + + + + +
   */
+ +124 + + + + + + +
  @Builder.Default private final long signatureCount = 0;
+ +125 + + + + + + +
+ +126 + + + + + + +
  /**
+ +127 + + + + + + +
   * Transport hints as to how the client might communicate with the authenticator this credential
+ +128 + + + + + + +
   * is bound to.
+ +129 + + + + + + +
   *
+ +130 + + + + + + +
   * <p>This SHOULD be set to the value returned by {@link
+ +131 + + + + + + +
   * AuthenticatorAttestationResponse#getTransports()} when the credential was created. That value
+ +132 + + + + + + +
   * SHOULD NOT be modified.
+ +133 + + + + + + +
   *
+ +134 + + + + + + +
   * <p>This is only used if the {@link RelyingParty} is configured with a {@link
+ +135 + + + + + + +
   * CredentialRepositoryV2}, in which case this is used to set {@link
+ +136 + + + + + + +
   * PublicKeyCredentialDescriptor#getTransports()} in {@link
+ +137 + + + + + + +
   * PublicKeyCredentialCreationOptions#getExcludeCredentials() excludeCredentials} in {@link
+ +138 + + + + + + +
   * RelyingParty#startRegistration(StartRegistrationOptions)} and {@link
+ +139 + + + + + + +
   * PublicKeyCredentialRequestOptions#getAllowCredentials() allowCredentials} in {@link
+ +140 + + + + + + +
   * RelyingParty#startAssertion(StartAssertionOptions)}. This is not used if the {@link
+ +141 + + + + + + +
   * RelyingParty} is configured with a {@link CredentialRepository}.
+ +142 + + + + + + +
   *
+ +143 + + + + + + +
   * @see <a
+ +144 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticatorattestationresponse-gettransports">getTransports()
+ +145 + + + + + + +
   *     in 5.2.1. Information About Public Key Credential (interface
+ +146 + + + + + + +
   *     AuthenticatorAttestationResponse)</a>
+ +147 + + + + + + +
   * @see <a
+ +148 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-publickeycredentialdescriptor-transports">transports
+ +149 + + + + + + +
   *     in 5.8.3. Credential Descriptor (dictionary PublicKeyCredentialDescriptor)</a>
+ +150 + + + + + + +
   * @see AuthenticatorAttestationResponse#getTransports()
+ +151 + + + + + + +
   * @see PublicKeyCredentialDescriptor#getTransports()
+ +152 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +153 + + + + + + +
   *     before reaching a mature release.
+ +154 + + + + + + +
   */
+ +155 + + + + + + +
  @Deprecated @Builder.Default private final Set<AuthenticatorTransport> transports = null;
+ +156 + + + + + + +
+ +157 + + + + + + +
  /**
+ +158 + + + + + + +
   * The state of the <a href="https://w3c.github.io/webauthn/#authdata-flags-be">BE flag</a> when
+ +159 + + + + + + +
   * this credential was registered, if known.
+ +160 + + + + + + +
   *
+ +161 + + + + + + +
   * <p>If absent, it is not known whether or not this credential is backup eligible.
+ +162 + + + + + + +
   *
+ +163 + + + + + + +
   * <p>If present and <code>true</code>, the credential is backup eligible: it can be backed up in
+ +164 + + + + + + +
   * some way, most commonly by syncing the private key to a cloud account.
+ +165 + + + + + + +
   *
+ +166 + + + + + + +
   * <p>If present and <code>false</code>, the credential is not backup eligible: it cannot be
+ +167 + + + + + + +
   * backed up in any way.
+ +168 + + + + + + +
   *
+ +169 + + + + + + +
   * <p>{@link CredentialRepository} implementations SHOULD set this to the first known value
+ +170 + + + + + + +
   * returned by {@link RegistrationResult#isBackupEligible()} or {@link
+ +171 + + + + + + +
   * AssertionResult#isBackupEligible()}, if known. If unknown, {@link CredentialRepository}
+ +172 + + + + + + +
   * implementations SHOULD set this to <code>null</code> or not set this value.
+ +173 + + + + + + +
   *
+ +174 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +175 + + + + + + +
   *     the standard matures.
+ +176 + + + + + + +
   */
+ +177 + + + + + + +
  @Deprecated
+ +178 + + + + + + +
  @Getter(AccessLevel.NONE)
+ +179 + + + + + + +
  @Builder.Default
+ +180 + + + + + + +
  private final Boolean backupEligible = null;
+ +181 + + + + + + +
+ +182 + + + + + + +
  /**
+ +183 + + + + + + +
   * The last known state of the <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">BS
+ +184 + + + + + + +
   * flag</a> for this credential, if known.
+ +185 + + + + + + +
   *
+ +186 + + + + + + +
   * <p>If absent, the backup state of the credential is not known.
+ +187 + + + + + + +
   *
+ +188 + + + + + + +
   * <p>If present and <code>true</code>, the credential is believed to be currently backed up.
+ +189 + + + + + + +
   *
+ +190 + + + + + + +
   * <p>If present and <code>false</code>, the credential is believed to not be currently backed up.
+ +191 + + + + + + +
   *
+ +192 + + + + + + +
   * <p>{@link CredentialRepository} implementations SHOULD set this to the most recent value
+ +193 + + + + + + +
   * returned by {@link AssertionResult#isBackedUp()} or {@link RegistrationResult#isBackedUp()}, if
+ +194 + + + + + + +
   * known. If unknown, {@link CredentialRepository} implementations SHOULD set this to <code>null
+ +195 + + + + + + +
   * </code> or not set this value.
+ +196 + + + + + + +
   *
+ +197 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +198 + + + + + + +
   *     the standard matures.
+ +199 + + + + + + +
   */
+ +200 + + + + + + +
  @Deprecated
+ +201 + + + + + + +
  @Getter(AccessLevel.NONE)
+ +202 + + + + + + +
  @Builder.Default
+ +203 + + + + + + +
  private final Boolean backupState = null;
+ +204 + + + + + + +
+ +205 + + + + + + +
  @JsonCreator
+ +206 + + + + + + +
  private RegisteredCredential(
+ +207 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("credentialId") ByteArray credentialId,
+ +208 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("userHandle") ByteArray userHandle,
+ +209 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("publicKeyCose") ByteArray publicKeyCose,
+ +210 + + + + + + +
      @JsonProperty("signatureCount") long signatureCount,
+ +211 + + + + + + +
      @JsonProperty("transports") Set<AuthenticatorTransport> transports,
+ +212 + + + + + + +
      @JsonProperty("backupEligible") Boolean backupEligible,
+ +213 + + + + + + +
      @JsonProperty("backupState") @JsonAlias("backedUp") Boolean backupState) {
+ +214 + + + + + + +
    this.credentialId = credentialId;
+ +215 + + + + + + +
    this.userHandle = userHandle;
+ +216 + + + + + + +
    this.publicKeyCose = publicKeyCose;
+ +217 + + + + + + +
    this.signatureCount = signatureCount;
+ +218 + + + + + + +
    this.transports = transports;
+ +219 + + + + + + +
    this.backupEligible = backupEligible;
+ +220 + + + + + + +
    this.backupState = backupState;
+ +221 + + + + + + +
  }
+ +222 + + + + + + +
+ +223 + + + + + + +
  /**
+ +224 + + + + + + +
   * Transport hints as to how the client might communicate with the authenticator this credential
+ +225 + + + + + + +
   * is bound to.
+ +226 + + + + + + +
   *
+ +227 + + + + + + +
   * <p>This SHOULD be set to the value returned by {@link
+ +228 + + + + + + +
   * AuthenticatorAttestationResponse#getTransports()} when the credential was created. That value
+ +229 + + + + + + +
   * SHOULD NOT be modified.
+ +230 + + + + + + +
   *
+ +231 + + + + + + +
   * <p>This is only used if the {@link RelyingParty} is configured with a {@link
+ +232 + + + + + + +
   * CredentialRepositoryV2}, in which case this is used to set {@link
+ +233 + + + + + + +
   * PublicKeyCredentialDescriptor#getTransports()} in {@link
+ +234 + + + + + + +
   * PublicKeyCredentialCreationOptions#getExcludeCredentials() excludeCredentials} in {@link
+ +235 + + + + + + +
   * RelyingParty#startRegistration(StartRegistrationOptions)} and {@link
+ +236 + + + + + + +
   * PublicKeyCredentialRequestOptions#getAllowCredentials() allowCredentials} in {@link
+ +237 + + + + + + +
   * RelyingParty#startAssertion(StartAssertionOptions)}. This is not used if the {@link
+ +238 + + + + + + +
   * RelyingParty} is configured with a {@link CredentialRepository}.
+ +239 + + + + + + +
   *
+ +240 + + + + + + +
   * @see <a
+ +241 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-authenticatorattestationresponse-gettransports">getTransports()
+ +242 + + + + + + +
   *     in 5.2.1. Information About Public Key Credential (interface
+ +243 + + + + + + +
   *     AuthenticatorAttestationResponse)</a>
+ +244 + + + + + + +
   * @see <a
+ +245 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-publickeycredentialdescriptor-transports">transports
+ +246 + + + + + + +
   *     in 5.8.3. Credential Descriptor (dictionary PublicKeyCredentialDescriptor)</a>
+ +247 + + + + + + +
   * @see AuthenticatorAttestationResponse#getTransports()
+ +248 + + + + + + +
   * @see PublicKeyCredentialDescriptor#getTransports()
+ +249 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +250 + + + + + + +
   *     before reaching a mature release.
+ +251 + + + + + + +
   */
+ +252 + + + + + + +
  @Deprecated
+ +253 + + + + + + +
  @Override
+ +254 + + + + + + +
  public Optional<Set<AuthenticatorTransport>> getTransports() {
+ +255 + + +1 + +1. getTransports : replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::getTransports → SURVIVED
+ +
+
+
    return Optional.ofNullable(transports);
+ +256 + + + + + + +
  }
+ +257 + + + + + + +
+ +258 + + + + + + +
  /**
+ +259 + + + + + + +
   * The state of the <a href="https://w3c.github.io/webauthn/#authdata-flags-be">BE flag</a> when
+ +260 + + + + + + +
   * this credential was registered, if known.
+ +261 + + + + + + +
   *
+ +262 + + + + + + +
   * <p>If absent, it is not known whether or not this credential is backup eligible.
+ +263 + + + + + + +
   *
+ +264 + + + + + + +
   * <p>If present and <code>true</code>, the credential is backup eligible: it can be backed up in
+ +265 + + + + + + +
   * some way, most commonly by syncing the private key to a cloud account.
+ +266 + + + + + + +
   *
+ +267 + + + + + + +
   * <p>If present and <code>false</code>, the credential is not backup eligible: it cannot be
+ +268 + + + + + + +
   * backed up in any way.
+ +269 + + + + + + +
   *
+ +270 + + + + + + +
   * <p>{@link CredentialRepository} implementations SHOULD set this to the first known value
+ +271 + + + + + + +
   * returned by {@link RegistrationResult#isBackupEligible()} or {@link
+ +272 + + + + + + +
   * AssertionResult#isBackupEligible()}, if known. If unknown, {@link CredentialRepository}
+ +273 + + + + + + +
   * implementations SHOULD set this to <code>null</code> or not set this value.
+ +274 + + + + + + +
   *
+ +275 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +276 + + + + + + +
   *     the standard matures.
+ +277 + + + + + + +
   */
+ +278 + + + + + + +
  @Deprecated
+ +279 + + + + + + +
  @JsonProperty("backupEligible")
+ +280 + + + + + + +
  public Optional<Boolean> isBackupEligible() {
+ +281 + + +1 + +1. isBackupEligible : replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::isBackupEligible → KILLED
+ +
+
+
    return Optional.ofNullable(backupEligible);
+ +282 + + + + + + +
  }
+ +283 + + + + + + +
+ +284 + + + + + + +
  /**
+ +285 + + + + + + +
   * The last known state of the <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">BS
+ +286 + + + + + + +
   * flag</a> for this credential, if known.
+ +287 + + + + + + +
   *
+ +288 + + + + + + +
   * <p>If absent, the backup state of the credential is not known.
+ +289 + + + + + + +
   *
+ +290 + + + + + + +
   * <p>If present and <code>true</code>, the credential is believed to be currently backed up.
+ +291 + + + + + + +
   *
+ +292 + + + + + + +
   * <p>If present and <code>false</code>, the credential is believed to not be currently backed up.
+ +293 + + + + + + +
   *
+ +294 + + + + + + +
   * <p>{@link CredentialRepository} implementations SHOULD set this to the most recent value
+ +295 + + + + + + +
   * returned by {@link AssertionResult#isBackedUp()} or {@link RegistrationResult#isBackedUp()}, if
+ +296 + + + + + + +
   * known. If unknown, {@link CredentialRepository} implementations SHOULD set this to <code>null
+ +297 + + + + + + +
   * </code> or not set this value.
+ +298 + + + + + + +
   *
+ +299 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +300 + + + + + + +
   *     the standard matures.
+ +301 + + + + + + +
   */
+ +302 + + + + + + +
  @Deprecated
+ +303 + + + + + + +
  @JsonProperty("backupState")
+ +304 + + + + + + +
  public Optional<Boolean> isBackedUp() {
+ +305 + + +1 + +1. isBackedUp : replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::isBackedUp → KILLED
+ +
+
+
    return Optional.ofNullable(backupState);
+ +306 + + + + + + +
  }
+ +307 + + + + + + +
+ +308 + + + + + + +
  public static RegisteredCredentialBuilder.MandatoryStages builder() {
+ +309 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/RegisteredCredential::builder → KILLED
+ +
+
+
    return new RegisteredCredentialBuilder.MandatoryStages();
+ +310 + + + + + + +
  }
+ +311 + + + + + + +
+ +312 + + + + + + +
  public static class RegisteredCredentialBuilder {
+ +313 + + + + + + +
    public static class MandatoryStages {
+ +314 + + + + + + +
      private final RegisteredCredentialBuilder builder = new RegisteredCredentialBuilder();
+ +315 + + + + + + +
+ +316 + + + + + + +
      /**
+ +317 + + + + + + +
       * {@link RegisteredCredentialBuilder#credentialId(ByteArray) credentialId} is a required
+ +318 + + + + + + +
       * parameter.
+ +319 + + + + + + +
       *
+ +320 + + + + + + +
       * @see RegisteredCredentialBuilder#credentialId(ByteArray)
+ +321 + + + + + + +
       */
+ +322 + + + + + + +
      public Step2 credentialId(ByteArray credentialId) {
+ +323 + + + + + + +
        builder.credentialId(credentialId);
+ +324 + + +1 + +1. credentialId : replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages::credentialId → KILLED
+ +
+
+
        return new Step2();
+ +325 + + + + + + +
      }
+ +326 + + + + + + +
+ +327 + + + + + + +
      public class Step2 {
+ +328 + + + + + + +
        /**
+ +329 + + + + + + +
         * {@link RegisteredCredentialBuilder#userHandle(ByteArray) userHandle} is a required
+ +330 + + + + + + +
         * parameter.
+ +331 + + + + + + +
         *
+ +332 + + + + + + +
         * @see RegisteredCredentialBuilder#userHandle(ByteArray)
+ +333 + + + + + + +
         */
+ +334 + + + + + + +
        public Step3 userHandle(ByteArray userHandle) {
+ +335 + + + + + + +
          builder.userHandle(userHandle);
+ +336 + + +1 + +1. userHandle : replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step2::userHandle → KILLED
+ +
+
+
          return new Step3();
+ +337 + + + + + + +
        }
+ +338 + + + + + + +
      }
+ +339 + + + + + + +
+ +340 + + + + + + +
      public class Step3 {
+ +341 + + + + + + +
        /**
+ +342 + + + + + + +
         * {@link RegisteredCredentialBuilder#publicKeyCose(ByteArray) publicKeyCose} is a required
+ +343 + + + + + + +
         * parameter.
+ +344 + + + + + + +
         *
+ +345 + + + + + + +
         * <p>The return value of {@link RegistrationResult#getPublicKeyCose()} is a suitable
+ +346 + + + + + + +
         * argument for this method.
+ +347 + + + + + + +
         *
+ +348 + + + + + + +
         * <p>Alternatively, the public key can be specified using the {@link
+ +349 + + + + + + +
         * #publicKeyEs256Raw(ByteArray)} method if the key is stored in the U2F format (<code>
+ +350 + + + + + + +
         * ALG_KEY_ECC_X962_RAW</code> as specified in <a
+ +351 + + + + + + +
         * href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-registry-v2.0-id-20180227.html#public-key-representation-formats">FIDO
+ +352 + + + + + + +
         * Registry §3.6.2 Public Key Representation Formats</a>). This is mostly useful for public
+ +353 + + + + + + +
         * keys registered via the U2F JavaScript API.
+ +354 + + + + + + +
         *
+ +355 + + + + + + +
         * @see #publicKeyEs256Raw(ByteArray)
+ +356 + + + + + + +
         * @see RegisteredCredentialBuilder#publicKeyCose(ByteArray)
+ +357 + + + + + + +
         * @see <a
+ +358 + + + + + + +
         *     href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-registry-v2.0-id-20180227.html#public-key-representation-formats">FIDO
+ +359 + + + + + + +
         *     Registry §3.6.2 Public Key Representation Formats</a>
+ +360 + + + + + + +
         */
+ +361 + + + + + + +
        public RegisteredCredentialBuilder publicKeyCose(ByteArray publicKeyCose) {
+ +362 + + +1 + +1. publicKeyCose : replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3::publicKeyCose → KILLED
+ +
+
+
          return builder.publicKeyCose(publicKeyCose);
+ +363 + + + + + + +
        }
+ +364 + + + + + + +
+ +365 + + + + + + +
        /**
+ +366 + + + + + + +
         * Specify the credential public key in U2F format.
+ +367 + + + + + + +
         *
+ +368 + + + + + + +
         * <p>An alternative to {@link #publicKeyCose(ByteArray)}, this method expects an {@link
+ +369 + + + + + + +
         * COSEAlgorithmIdentifier#ES256 ES256} public key in <code>ALG_KEY_ECC_X962_RAW</code>
+ +370 + + + + + + +
         * format as specified in <a
+ +371 + + + + + + +
         * href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-registry-v2.0-id-20180227.html#public-key-representation-formats">FIDO
+ +372 + + + + + + +
         * Registry §3.6.2 Public Key Representation Formats</a>.
+ +373 + + + + + + +
         *
+ +374 + + + + + + +
         * <p>This is primarily intended for public keys registered via the U2F JavaScript API. If
+ +375 + + + + + + +
         * your application has only used the <code>navigator.credentials.create()</code> API to
+ +376 + + + + + + +
         * register credentials, you should use {@link #publicKeyCose(ByteArray)} instead.
+ +377 + + + + + + +
         *
+ +378 + + + + + + +
         * @see RegisteredCredentialBuilder#publicKeyCose(ByteArray)
+ +379 + + + + + + +
         */
+ +380 + + + + + + +
        public RegisteredCredentialBuilder publicKeyEs256Raw(ByteArray publicKeyEs256Raw) {
+ +381 + + +1 + +1. publicKeyEs256Raw : replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3::publicKeyEs256Raw → KILLED
+ +
+
+
          return builder.publicKeyCose(WebAuthnCodecs.rawEcKeyToCose(publicKeyEs256Raw));
+ +382 + + + + + + +
        }
+ +383 + + + + + + +
      }
+ +384 + + + + + + +
    }
+ +385 + + + + + + +
+ +386 + + + + + + +
    /**
+ +387 + + + + + + +
     * The credential public key encoded in COSE_Key format, as defined in Section 7 of <a
+ +388 + + + + + + +
     * href="https://tools.ietf.org/html/rfc8152">RFC 8152</a>. This method overwrites {@link
+ +389 + + + + + + +
     * #publicKeyEs256Raw(ByteArray)}.
+ +390 + + + + + + +
     *
+ +391 + + + + + + +
     * <p>The return value of {@link RegistrationResult#getPublicKeyCose()} is a suitable argument
+ +392 + + + + + + +
     * for this method.
+ +393 + + + + + + +
     *
+ +394 + + + + + + +
     * <p>This is used to verify the {@link AuthenticatorAssertionResponse#getSignature() signature}
+ +395 + + + + + + +
     * in authentication assertions.
+ +396 + + + + + + +
     *
+ +397 + + + + + + +
     * <p>Alternatively, the public key can be specified using the {@link
+ +398 + + + + + + +
     * #publicKeyEs256Raw(ByteArray)} method if the key is stored in the U2F format (<code>
+ +399 + + + + + + +
     * ALG_KEY_ECC_X962_RAW</code> as specified in <a
+ +400 + + + + + + +
     * href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-registry-v2.0-id-20180227.html#public-key-representation-formats">FIDO
+ +401 + + + + + + +
     * Registry §3.6.2 Public Key Representation Formats</a>). This is mostly useful for public keys
+ +402 + + + + + + +
     * registered via the U2F JavaScript API.
+ +403 + + + + + + +
     *
+ +404 + + + + + + +
     * @see AttestedCredentialData#getCredentialPublicKey()
+ +405 + + + + + + +
     * @see RegistrationResult#getPublicKeyCose()
+ +406 + + + + + + +
     */
+ +407 + + +1 + +1. publicKeyCose : negated conditional → KILLED
+ +
+
+
    public RegisteredCredentialBuilder publicKeyCose(@NonNull ByteArray publicKeyCose) {
+ +408 + + + + + + +
      this.publicKeyCose = publicKeyCose;
+ +409 + + +1 + +1. publicKeyCose : replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder::publicKeyCose → KILLED
+ +
+
+
      return this;
+ +410 + + + + + + +
    }
+ +411 + + + + + + +
+ +412 + + + + + + +
    /**
+ +413 + + + + + + +
     * Specify the credential public key in U2F format. This method overwrites {@link
+ +414 + + + + + + +
     * #publicKeyCose(ByteArray)}.
+ +415 + + + + + + +
     *
+ +416 + + + + + + +
     * <p>An alternative to {@link #publicKeyCose(ByteArray)}, this method expects an {@link
+ +417 + + + + + + +
     * COSEAlgorithmIdentifier#ES256 ES256} public key in <code>ALG_KEY_ECC_X962_RAW</code> format
+ +418 + + + + + + +
     * as specified in <a
+ +419 + + + + + + +
     * href="https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-registry-v2.0-id-20180227.html#public-key-representation-formats">FIDO
+ +420 + + + + + + +
     * Registry §3.6.2 Public Key Representation Formats</a>.
+ +421 + + + + + + +
     *
+ +422 + + + + + + +
     * <p>This is primarily intended for public keys registered via the U2F JavaScript API. If your
+ +423 + + + + + + +
     * application has only used the <code>navigator.credentials.create()</code> API to register
+ +424 + + + + + + +
     * credentials, you should use {@link #publicKeyCose(ByteArray)} instead.
+ +425 + + + + + + +
     *
+ +426 + + + + + + +
     * @see RegisteredCredentialBuilder#publicKeyCose(ByteArray)
+ +427 + + + + + + +
     */
+ +428 + + + + + + +
    public RegisteredCredentialBuilder publicKeyEs256Raw(ByteArray publicKeyEs256Raw) {
+ +429 + + +1 + +1. publicKeyEs256Raw : replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder::publicKeyEs256Raw → KILLED
+ +
+
+
      return publicKeyCose(WebAuthnCodecs.rawEcKeyToCose(publicKeyEs256Raw));
+ +430 + + + + + + +
    }
+ +431 + + + + + + +
  }
+ +432 + + + + + + +
}

Mutations

108 + + + +

1.1
Location : getParsedPublicKey
Killed by : none
replaced return value with null for com/yubico/webauthn/RegisteredCredential::getParsedPublicKey → NO_COVERAGE

+
207 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
208 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
209 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
255 + + + +

1.1
Location : getTransports
Killed by : none
replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::getTransports → SURVIVED

+
281 + + + +

1.1
Location : isBackupEligible
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::isBackupEligible → KILLED

+
305 + + + +

1.1
Location : isBackedUp
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::isBackedUp → KILLED

+
309 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RegisteredCredential::builder → KILLED

+
324 + + + +

1.1
Location : credentialId
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages::credentialId → KILLED

+
336 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step2::userHandle → KILLED

+
362 + + + +

1.1
Location : publicKeyCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3::publicKeyCose → KILLED

+
381 + + + +

1.1
Location : publicKeyEs256Raw
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3::publicKeyEs256Raw → KILLED

+
407 + + + +

1.1
Location : publicKeyCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
409 + + + +

1.1
Location : publicKeyCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder::publicKeyCose → KILLED

+
429 + + + +

1.1
Location : publicKeyEs256Raw
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder::publicKeyEs256Raw → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RegistrationResult.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RegistrationResult.java.html new file mode 100644 index 000000000..a130c2c40 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RegistrationResult.java.html @@ -0,0 +1,6470 @@ + + + + + + + + + +

RegistrationResult.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import COSE.CoseException;
+ +28 + + + + + + +
import com.fasterxml.jackson.annotation.JsonCreator;
+ +29 + + + + + + +
import com.fasterxml.jackson.annotation.JsonIgnore;
+ +30 + + + + + + +
import com.fasterxml.jackson.annotation.JsonProperty;
+ +31 + + + + + + +
import com.yubico.internal.util.CertificateParser;
+ +32 + + + + + + +
import com.yubico.webauthn.RelyingParty.RelyingPartyBuilder;
+ +33 + + + + + + +
import com.yubico.webauthn.attestation.AttestationTrustSource;
+ +34 + + + + + + +
import com.yubico.webauthn.data.AttestationType;
+ +35 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAttachment;
+ +36 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorAttestationResponse;
+ +37 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorData;
+ +38 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorDataFlags;
+ +39 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs;
+ +40 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorResponse;
+ +41 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +42 + + + + + + +
import com.yubico.webauthn.data.ClientRegistrationExtensionOutputs;
+ +43 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredential;
+ +44 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialDescriptor;
+ +45 + + + + + + +
import java.io.IOException;
+ +46 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +47 + + + + + + +
import java.security.PublicKey;
+ +48 + + + + + + +
import java.security.cert.CertificateEncodingException;
+ +49 + + + + + + +
import java.security.cert.CertificateException;
+ +50 + + + + + + +
import java.security.cert.X509Certificate;
+ +51 + + + + + + +
import java.security.spec.InvalidKeySpecException;
+ +52 + + + + + + +
import java.util.List;
+ +53 + + + + + + +
import java.util.Optional;
+ +54 + + + + + + +
import java.util.stream.Collectors;
+ +55 + + + + + + +
import lombok.AccessLevel;
+ +56 + + + + + + +
import lombok.Getter;
+ +57 + + + + + + +
import lombok.NonNull;
+ +58 + + + + + + +
import lombok.Value;
+ +59 + + + + + + +
+ +60 + + + + + + +
/** The result of a call to {@link RelyingParty#finishRegistration(FinishRegistrationOptions)}. */
+ +61 + + + + + + +
@Value
+ +62 + + + + + + +
public class RegistrationResult {
+ +63 + + + + + + +
+ +64 + + + + + + +
  @JsonProperty
+ +65 + + + + + + +
  @Getter(AccessLevel.NONE)
+ +66 + + + + + + +
  private final PublicKeyCredential<
+ +67 + + + + + + +
          AuthenticatorAttestationResponse, ClientRegistrationExtensionOutputs>
+ +68 + + + + + + +
      credential;
+ +69 + + + + + + +
+ +70 + + + + + + +
  /**
+ +71 + + + + + + +
   * <code>true</code> if and only if the attestation signature was successfully linked to a trusted
+ +72 + + + + + + +
   * attestation root.
+ +73 + + + + + + +
   *
+ +74 + + + + + + +
   * <p>This will always be <code>false</code> unless the {@link
+ +75 + + + + + + +
   * RelyingPartyBuilder#attestationTrustSource(AttestationTrustSource) attestationTrustSource}
+ +76 + + + + + + +
   * setting was configured on the {@link RelyingParty} instance.
+ +77 + + + + + + +
   *
+ +78 + + + + + + +
   * <p>You can ignore this if authenticator attestation is not relevant to your application.
+ +79 + + + + + + +
   */
+ +80 + + + + + + +
  private final boolean attestationTrusted;
+ +81 + + + + + + +
+ +82 + + + + + + +
  /**
+ +83 + + + + + + +
   * The <a
+ +84 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation-types">attestation
+ +85 + + + + + + +
   * type</a> that was used for the created credential.
+ +86 + + + + + + +
   *
+ +87 + + + + + + +
   * <p>You can ignore this if authenticator attestation is not relevant to your application.
+ +88 + + + + + + +
   *
+ +89 + + + + + + +
   * @see <a
+ +90 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation-types">§6.4.3.
+ +91 + + + + + + +
   *     Attestation Types</a>
+ +92 + + + + + + +
   */
+ +93 + + + + + + +
  @NonNull private final AttestationType attestationType;
+ +94 + + + + + + +
+ +95 + + + + + + +
  // JavaDoc on getter
+ +96 + + + + + + +
  private final List<X509Certificate> attestationTrustPath;
+ +97 + + + + + + +
+ +98 + + + + + + +
  RegistrationResult(
+ +99 + + + + + + +
      PublicKeyCredential<AuthenticatorAttestationResponse, ClientRegistrationExtensionOutputs>
+ +100 + + + + + + +
          credential,
+ +101 + + + + + + +
      boolean attestationTrusted,
+ +102 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull AttestationType attestationType,
+ +103 + + + + + + +
      Optional<List<X509Certificate>> attestationTrustPath) {
+ +104 + + + + + + +
    this.credential = credential;
+ +105 + + + + + + +
    this.attestationTrusted = attestationTrusted;
+ +106 + + + + + + +
    this.attestationType = attestationType;
+ +107 + + + + + + +
    this.attestationTrustPath = attestationTrustPath.orElse(null);
+ +108 + + + + + + +
  }
+ +109 + + + + + + +
+ +110 + + + + + + +
  @JsonCreator
+ +111 + + + + + + +
  private static RegistrationResult fromJson(
+ +112 + + +1 + +1. fromJson : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("credential")
+ +113 + + + + + + +
          PublicKeyCredential<AuthenticatorAttestationResponse, ClientRegistrationExtensionOutputs>
+ +114 + + + + + + +
              credential,
+ +115 + + + + + + +
      @JsonProperty("attestationTrusted") boolean attestationTrusted,
+ +116 + + +1 + +1. fromJson : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("attestationType") AttestationType attestationType,
+ +117 + + +1 + +1. fromJson : negated conditional → KILLED
+ +
+
+
      @NonNull @JsonProperty("attestationTrustPath") Optional<List<String>> attestationTrustPath) {
+ +118 + + +1 + +1. fromJson : replaced return value with null for com/yubico/webauthn/RegistrationResult::fromJson → KILLED
+ +
+
+
    return new RegistrationResult(
+ +119 + + + + + + +
        credential,
+ +120 + + + + + + +
        attestationTrusted,
+ +121 + + + + + + +
        attestationType,
+ +122 + + + + + + +
        attestationTrustPath.map(
+ +123 + + + + + + +
            atp ->
+ +124 + + + + + + +
                atp.stream()
+ +125 + + + + + + +
                    .map(
+ +126 + + + + + + +
                        pem -> {
+ +127 + + + + + + +
                          try {
+ +128 + + +1 + +1. lambda$fromJson$0 : replaced return value with null for com/yubico/webauthn/RegistrationResult::lambda$fromJson$0 → KILLED
+ +
+
+
                            return CertificateParser.parsePem(pem);
+ +129 + + + + + + +
                          } catch (CertificateException e) {
+ +130 + + + + + + +
                            throw new RuntimeException(e);
+ +131 + + + + + + +
                          }
+ +132 + + + + + + +
                        })
+ +133 + + +1 + +1. lambda$fromJson$1 : replaced return value with Collections.emptyList for com/yubico/webauthn/RegistrationResult::lambda$fromJson$1 → KILLED
+ +
+
+
                    .collect(Collectors.toList())));
+ +134 + + + + + + +
  }
+ +135 + + + + + + +
+ +136 + + + + + + +
  /**
+ +137 + + + + + + +
   * Check whether the <a href="https://www.w3.org/TR/webauthn/#user-verification">user
+ +138 + + + + + + +
   * verification</a> as performed during the registration ceremony.
+ +139 + + + + + + +
   *
+ +140 + + + + + + +
   * <p>This flag is also available via <code>
+ +141 + + + + + + +
   * {@link PublicKeyCredential}.{@link PublicKeyCredential#getResponse() getResponse()}.{@link AuthenticatorResponse#getParsedAuthenticatorData() getParsedAuthenticatorData()}.{@link AuthenticatorData#getFlags() getFlags()}.{@link AuthenticatorDataFlags#UV UV}
+ +142 + + + + + + +
   * </code>.
+ +143 + + + + + + +
   *
+ +144 + + + + + + +
   * @return <code>true</code> if and only if the authenticator claims to have performed user
+ +145 + + + + + + +
   *     verification during the registration ceremony.
+ +146 + + + + + + +
   * @see <a href="https://www.w3.org/TR/webauthn/#user-verification">User Verification</a>
+ +147 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-uv">UV flag in §6.1. Authenticator
+ +148 + + + + + + +
   *     Data</a>
+ +149 + + + + + + +
   */
+ +150 + + + + + + +
  @JsonIgnore
+ +151 + + + + + + +
  public boolean isUserVerified() {
+ +152 + + +2 + +1. isUserVerified : replaced boolean return with false for com/yubico/webauthn/RegistrationResult::isUserVerified → KILLED
+2. isUserVerified : replaced boolean return with true for com/yubico/webauthn/RegistrationResult::isUserVerified → KILLED
+ +
+
+
    return credential.getResponse().getParsedAuthenticatorData().getFlags().UV;
+ +153 + + + + + + +
  }
+ +154 + + + + + + +
+ +155 + + + + + + +
  /**
+ +156 + + + + + + +
   * Check whether the created credential is <a
+ +157 + + + + + + +
   * href="https://w3c.github.io/webauthn/#backup-eligible">backup eligible</a>, using the <a
+ +158 + + + + + + +
   * href="https://w3c.github.io/webauthn/#authdata-flags-be">BE flag</a> in the authenticator data.
+ +159 + + + + + + +
   *
+ +160 + + + + + + +
   * <p>You SHOULD store this value in your representation of a {@link RegisteredCredential}. {@link
+ +161 + + + + + + +
   * CredentialRepository} implementations SHOULD set this value as the {@link
+ +162 + + + + + + +
   * RegisteredCredential.RegisteredCredentialBuilder#backupEligible(Boolean)
+ +163 + + + + + + +
   * backupEligible(Boolean)} value when reconstructing that {@link RegisteredCredential}.
+ +164 + + + + + + +
   *
+ +165 + + + + + + +
   * @return <code>true</code> if and only if the created credential is backup eligible. NOTE that
+ +166 + + + + + + +
   *     this is only a hint and not a guarantee, unless backed by a trusted authenticator
+ +167 + + + + + + +
   *     attestation.
+ +168 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#backup-eligible">Backup Eligible in §4.
+ +169 + + + + + + +
   *     Terminology</a>
+ +170 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-be">BE flag in §6.1. Authenticator
+ +171 + + + + + + +
   *     Data</a>
+ +172 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +173 + + + + + + +
   *     the standard matures.
+ +174 + + + + + + +
   */
+ +175 + + + + + + +
  @Deprecated
+ +176 + + + + + + +
  @JsonIgnore
+ +177 + + + + + + +
  public boolean isBackupEligible() {
+ +178 + + +2 + +1. isBackupEligible : replaced boolean return with true for com/yubico/webauthn/RegistrationResult::isBackupEligible → KILLED
+2. isBackupEligible : replaced boolean return with false for com/yubico/webauthn/RegistrationResult::isBackupEligible → KILLED
+ +
+
+
    return credential.getResponse().getParsedAuthenticatorData().getFlags().BE;
+ +179 + + + + + + +
  }
+ +180 + + + + + + +
+ +181 + + + + + + +
  /**
+ +182 + + + + + + +
   * Get the current <a href="https://w3c.github.io/webauthn/#backup-state">backup state</a> of the
+ +183 + + + + + + +
   * created credential, using the <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">BS
+ +184 + + + + + + +
   * flag</a> in the authenticator data.
+ +185 + + + + + + +
   *
+ +186 + + + + + + +
   * <p>You SHOULD store this value in your representation of a {@link RegisteredCredential}. {@link
+ +187 + + + + + + +
   * CredentialRepository} implementations SHOULD set this value as the {@link
+ +188 + + + + + + +
   * RegisteredCredential.RegisteredCredentialBuilder#backupState(Boolean) backupState(Boolean)}
+ +189 + + + + + + +
   * value when reconstructing that {@link RegisteredCredential}.
+ +190 + + + + + + +
   *
+ +191 + + + + + + +
   * @return <code>true</code> if and only if the created credential is believed to currently be
+ +192 + + + + + + +
   *     backed up. NOTE that this is only a hint and not a guarantee, unless backed by a trusted
+ +193 + + + + + + +
   *     authenticator attestation.
+ +194 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#backup-state">Backup State in §4. Terminology</a>
+ +195 + + + + + + +
   * @see <a href="https://w3c.github.io/webauthn/#authdata-flags-bs">BS flag in §6.1. Authenticator
+ +196 + + + + + + +
   *     Data</a>
+ +197 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +198 + + + + + + +
   *     the standard matures.
+ +199 + + + + + + +
   */
+ +200 + + + + + + +
  @Deprecated
+ +201 + + + + + + +
  @JsonIgnore
+ +202 + + + + + + +
  public boolean isBackedUp() {
+ +203 + + +2 + +1. isBackedUp : replaced boolean return with true for com/yubico/webauthn/RegistrationResult::isBackedUp → KILLED
+2. isBackedUp : replaced boolean return with false for com/yubico/webauthn/RegistrationResult::isBackedUp → KILLED
+ +
+
+
    return credential.getResponse().getParsedAuthenticatorData().getFlags().BS;
+ +204 + + + + + + +
  }
+ +205 + + + + + + +
+ +206 + + + + + + +
  /**
+ +207 + + + + + + +
   * The <a href="https://w3c.github.io/webauthn/#authenticator-attachment-modality">authenticator
+ +208 + + + + + + +
   * attachment modality</a> in effect at the time the credential was created.
+ +209 + + + + + + +
   *
+ +210 + + + + + + +
   * @see PublicKeyCredential#getAuthenticatorAttachment()
+ +211 + + + + + + +
   * @deprecated EXPERIMENTAL: This feature is from a not yet mature standard; it could change as
+ +212 + + + + + + +
   *     the standard matures.
+ +213 + + + + + + +
   */
+ +214 + + + + + + +
  @Deprecated
+ +215 + + + + + + +
  @JsonIgnore
+ +216 + + + + + + +
  public Optional<AuthenticatorAttachment> getAuthenticatorAttachment() {
+ +217 + + +1 + +1. getAuthenticatorAttachment : replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAuthenticatorAttachment → KILLED
+ +
+
+
    return credential.getAuthenticatorAttachment();
+ +218 + + + + + + +
  }
+ +219 + + + + + + +
+ +220 + + + + + + +
  /**
+ +221 + + + + + + +
   * The signature count returned with the created credential.
+ +222 + + + + + + +
   *
+ +223 + + + + + + +
   * <p>This is used in {@link RelyingParty#finishAssertion(FinishAssertionOptions)} to verify the
+ +224 + + + + + + +
   * validity of future signature counter values.
+ +225 + + + + + + +
   *
+ +226 + + + + + + +
   * @see RegisteredCredential#getSignatureCount()
+ +227 + + + + + + +
   */
+ +228 + + + + + + +
  @JsonIgnore
+ +229 + + + + + + +
  public long getSignatureCount() {
+ +230 + + +1 + +1. getSignatureCount : replaced long return with 0 for com/yubico/webauthn/RegistrationResult::getSignatureCount → KILLED
+ +
+
+
    return credential.getResponse().getParsedAuthenticatorData().getSignatureCounter();
+ +231 + + + + + + +
  }
+ +232 + + + + + + +
+ +233 + + + + + + +
  /**
+ +234 + + + + + + +
   * The <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#credential-id">credential
+ +235 + + + + + + +
   * ID</a> and <a
+ +236 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-publickeycredentialdescriptor-transports">transports</a>
+ +237 + + + + + + +
   * of the created credential.
+ +238 + + + + + + +
   *
+ +239 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#credential-id">Credential
+ +240 + + + + + + +
   *     ID</a>
+ +241 + + + + + + +
   * @see <a
+ +242 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dictionary-credential-descriptor">5.8.3.
+ +243 + + + + + + +
   *     Credential Descriptor (dictionary PublicKeyCredentialDescriptor)</a>
+ +244 + + + + + + +
   * @see PublicKeyCredential#getId()
+ +245 + + + + + + +
   */
+ +246 + + + + + + +
  @JsonIgnore
+ +247 + + + + + + +
  public PublicKeyCredentialDescriptor getKeyId() {
+ +248 + + +1 + +1. getKeyId : replaced return value with null for com/yubico/webauthn/RegistrationResult::getKeyId → KILLED
+ +
+
+
    return PublicKeyCredentialDescriptor.builder()
+ +249 + + + + + + +
        .id(credential.getId())
+ +250 + + + + + + +
        .type(credential.getType())
+ +251 + + + + + + +
        .transports(credential.getResponse().getTransports())
+ +252 + + + + + + +
        .build();
+ +253 + + + + + + +
  }
+ +254 + + + + + + +
+ +255 + + + + + + +
  /**
+ +256 + + + + + + +
   * The <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#aaguid"><code>aaguid</code>
+ +257 + + + + + + +
   * </a> reported in the <a
+ +258 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-data">of the
+ +259 + + + + + + +
   * created credential.</a>
+ +260 + + + + + + +
   *
+ +261 + + + + + + +
   * <p>This MAY be an AAGUID consisting of only zeroes.
+ +262 + + + + + + +
   */
+ +263 + + + + + + +
  @JsonIgnore
+ +264 + + + + + + +
  public ByteArray getAaguid() {
+ +265 + + +1 + +1. getAaguid : replaced return value with null for com/yubico/webauthn/RegistrationResult::getAaguid → KILLED
+ +
+
+
    return credential
+ +266 + + + + + + +
        .getResponse()
+ +267 + + + + + + +
        .getAttestation()
+ +268 + + + + + + +
        .getAuthenticatorData()
+ +269 + + + + + + +
        .getAttestedCredentialData()
+ +270 + + + + + + +
        .get()
+ +271 + + + + + + +
        .getAaguid();
+ +272 + + + + + + +
  }
+ +273 + + + + + + +
+ +274 + + + + + + +
  /**
+ +275 + + + + + + +
   * The public key of the created credential.
+ +276 + + + + + + +
   *
+ +277 + + + + + + +
   * <p>This is used in {@link RelyingParty#finishAssertion(FinishAssertionOptions)} to verify the
+ +278 + + + + + + +
   * authentication signatures.
+ +279 + + + + + + +
   *
+ +280 + + + + + + +
   * @see RegisteredCredential#getPublicKeyCose()
+ +281 + + + + + + +
   */
+ +282 + + + + + + +
  @JsonIgnore
+ +283 + + + + + + +
  public ByteArray getPublicKeyCose() {
+ +284 + + +1 + +1. getPublicKeyCose : replaced return value with null for com/yubico/webauthn/RegistrationResult::getPublicKeyCose → KILLED
+ +
+
+
    return credential
+ +285 + + + + + + +
        .getResponse()
+ +286 + + + + + + +
        .getAttestation()
+ +287 + + + + + + +
        .getAuthenticatorData()
+ +288 + + + + + + +
        .getAttestedCredentialData()
+ +289 + + + + + + +
        .get()
+ +290 + + + + + + +
        .getCredentialPublicKey();
+ +291 + + + + + + +
  }
+ +292 + + + + + + +
+ +293 + + + + + + +
  /**
+ +294 + + + + + + +
   * The public key of the created credential, parsed as a {@link PublicKey} object.
+ +295 + + + + + + +
   *
+ +296 + + + + + + +
   * @see #getPublicKeyCose()
+ +297 + + + + + + +
   * @see RegisteredCredential#getParsedPublicKey()
+ +298 + + + + + + +
   */
+ +299 + + + + + + +
  @NonNull
+ +300 + + + + + + +
  @JsonIgnore
+ +301 + + + + + + +
  public PublicKey getParsedPublicKey()
+ +302 + + + + + + +
      throws InvalidKeySpecException, NoSuchAlgorithmException, CoseException, IOException {
+ +303 + + +1 + +1. getParsedPublicKey : replaced return value with null for com/yubico/webauthn/RegistrationResult::getParsedPublicKey → NO_COVERAGE
+ +
+
+
    return WebAuthnCodecs.importCosePublicKey(getPublicKeyCose());
+ +304 + + + + + + +
  }
+ +305 + + + + + + +
+ +306 + + + + + + +
  /**
+ +307 + + + + + + +
   * The <a
+ +308 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-extension-output">client
+ +309 + + + + + + +
   * extension outputs</a>, if any.
+ +310 + + + + + + +
   *
+ +311 + + + + + + +
   * <p>This is present if and only if at least one extension output is present in the return value.
+ +312 + + + + + + +
   *
+ +313 + + + + + + +
   * @see <a
+ +314 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-client-extension-processing">§9.4.
+ +315 + + + + + + +
   *     Client Extension Processing</a>
+ +316 + + + + + + +
   * @see ClientRegistrationExtensionOutputs
+ +317 + + + + + + +
   * @see #getAuthenticatorExtensionOutputs() ()
+ +318 + + + + + + +
   */
+ +319 + + + + + + +
  @JsonIgnore
+ +320 + + + + + + +
  public Optional<ClientRegistrationExtensionOutputs> getClientExtensionOutputs() {
+ +321 + + +1 + +1. getClientExtensionOutputs : replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getClientExtensionOutputs → KILLED
+ +
+
+
    return Optional.ofNullable(credential.getClientExtensionResults())
+ +322 + + +2 + +1. lambda$getClientExtensionOutputs$2 : replaced boolean return with true for com/yubico/webauthn/RegistrationResult::lambda$getClientExtensionOutputs$2 → SURVIVED
+2. lambda$getClientExtensionOutputs$2 : negated conditional → KILLED
+ +
+
+
        .filter(ceo -> !ceo.getExtensionIds().isEmpty());
+ +323 + + + + + + +
  }
+ +324 + + + + + + +
+ +325 + + + + + + +
  /**
+ +326 + + + + + + +
   * The <a
+ +327 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#authenticator-extension-output">authenticator
+ +328 + + + + + + +
   * extension outputs</a>, if any.
+ +329 + + + + + + +
   *
+ +330 + + + + + + +
   * <p>This is present if and only if at least one extension output is present in the return value.
+ +331 + + + + + + +
   *
+ +332 + + + + + + +
   * @see <a
+ +333 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-extension-processing">§9.5.
+ +334 + + + + + + +
   *     Authenticator Extension Processing</a>
+ +335 + + + + + + +
   * @see AuthenticatorRegistrationExtensionOutputs
+ +336 + + + + + + +
   * @see #getClientExtensionOutputs()
+ +337 + + + + + + +
   */
+ +338 + + + + + + +
  @JsonIgnore
+ +339 + + + + + + +
  public Optional<AuthenticatorRegistrationExtensionOutputs> getAuthenticatorExtensionOutputs() {
+ +340 + + +1 + +1. getAuthenticatorExtensionOutputs : replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAuthenticatorExtensionOutputs → KILLED
+ +
+
+
    return AuthenticatorRegistrationExtensionOutputs.fromAuthenticatorData(
+ +341 + + + + + + +
        credential.getResponse().getParsedAuthenticatorData());
+ +342 + + + + + + +
  }
+ +343 + + + + + + +
+ +344 + + + + + + +
  /**
+ +345 + + + + + + +
   * Try to determine whether the created credential is a <a
+ +346 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#discoverable-credential">discoverable
+ +347 + + + + + + +
   * credential</a>, also called a <i>passkey</i>, using the output from the <a
+ +348 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-authenticator-credential-properties-extension">
+ +349 + + + + + + +
   * <code>credProps</code></a> extension.
+ +350 + + + + + + +
   *
+ +351 + + + + + + +
   * @return A present <code>true</code> if the created credential is a passkey (discoverable). A
+ +352 + + + + + + +
   *     present <code>
+ +353 + + + + + + +
   *     false</code> if the created credential is not a passkey. An empty value if it is not known
+ +354 + + + + + + +
   *     whether the created credential is a passkey.
+ +355 + + + + + + +
   * @see <a
+ +356 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-credentialpropertiesoutput-rk">§10.4.
+ +357 + + + + + + +
   *     Credential Properties Extension (credProps), "rk" output</a>
+ +358 + + + + + + +
   * @see <a
+ +359 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#discoverable-credential">Discoverable
+ +360 + + + + + + +
   *     Credential</a>
+ +361 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +362 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +363 + + + + + + +
   */
+ +364 + + + + + + +
  @JsonIgnore
+ +365 + + + + + + +
  public Optional<Boolean> isDiscoverable() {
+ +366 + + +1 + +1. isDiscoverable : replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::isDiscoverable → KILLED
+ +
+
+
    return getClientExtensionOutputs()
+ +367 + + +1 + +1. lambda$isDiscoverable$3 : replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::lambda$isDiscoverable$3 → KILLED
+ +
+
+
        .flatMap(outputs -> outputs.getCredProps())
+ +368 + + +1 + +1. lambda$isDiscoverable$4 : replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::lambda$isDiscoverable$4 → KILLED
+ +
+
+
        .flatMap(credProps -> credProps.getRk());
+ +369 + + + + + + +
  }
+ +370 + + + + + + +
+ +371 + + + + + + +
  /**
+ +372 + + + + + + +
   * The <a
+ +373 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#attestation-trust-path">attestation
+ +374 + + + + + + +
   * trust path</a> for the created credential, if any.
+ +375 + + + + + + +
   *
+ +376 + + + + + + +
   * <p>If present, this may be useful for looking up attestation metadata from external sources.
+ +377 + + + + + + +
   * The attestation trust path has been successfully verified as trusted if and only if {@link
+ +378 + + + + + + +
   * #isAttestationTrusted()} is <code>true</code>.
+ +379 + + + + + + +
   *
+ +380 + + + + + + +
   * <p>You can ignore this if authenticator attestation is not relevant to your application.
+ +381 + + + + + + +
   *
+ +382 + + + + + + +
   * @see <a
+ +383 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#attestation-trust-path">Attestation
+ +384 + + + + + + +
   *     trust path</a>
+ +385 + + + + + + +
   */
+ +386 + + + + + + +
  @JsonIgnore
+ +387 + + + + + + +
  public Optional<List<X509Certificate>> getAttestationTrustPath() {
+ +388 + + +1 + +1. getAttestationTrustPath : replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAttestationTrustPath → KILLED
+ +
+
+
    return Optional.ofNullable(attestationTrustPath);
+ +389 + + + + + + +
  }
+ +390 + + + + + + +
+ +391 + + + + + + +
  @JsonProperty("attestationTrustPath")
+ +392 + + + + + + +
  private Optional<List<String>> getAttestationTrustPathJson() {
+ +393 + + +1 + +1. getAttestationTrustPathJson : replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAttestationTrustPathJson → KILLED
+ +
+
+
    return getAttestationTrustPath()
+ +394 + + + + + + +
        .map(
+ +395 + + + + + + +
            x5c ->
+ +396 + + + + + + +
                x5c.stream()
+ +397 + + + + + + +
                    .map(
+ +398 + + + + + + +
                        cert -> {
+ +399 + + + + + + +
                          try {
+ +400 + + +1 + +1. lambda$getAttestationTrustPathJson$5 : replaced return value with "" for com/yubico/webauthn/RegistrationResult::lambda$getAttestationTrustPathJson$5 → KILLED
+ +
+
+
                            return new ByteArray(cert.getEncoded()).getBase64();
+ +401 + + + + + + +
                          } catch (CertificateEncodingException e) {
+ +402 + + + + + + +
                            throw new RuntimeException(e);
+ +403 + + + + + + +
                          }
+ +404 + + + + + + +
                        })
+ +405 + + +1 + +1. lambda$getAttestationTrustPathJson$6 : replaced return value with Collections.emptyList for com/yubico/webauthn/RegistrationResult::lambda$getAttestationTrustPathJson$6 → KILLED
+ +
+
+
                    .collect(Collectors.toList()));
+ +406 + + + + + + +
  }
+ +407 + + + + + + +
}

Mutations

102 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
112 + + + +

1.1
Location : fromJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
negated conditional → KILLED

+
116 + + + +

1.1
Location : fromJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
negated conditional → KILLED

+
117 + + + +

1.1
Location : fromJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
negated conditional → KILLED

+
118 + + + +

1.1
Location : fromJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with null for com/yubico/webauthn/RegistrationResult::fromJson → KILLED

+
128 + + + +

1.1
Location : lambda$fromJson$0
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with null for com/yubico/webauthn/RegistrationResult::lambda$fromJson$0 → KILLED

+
133 + + + +

1.1
Location : lambda$fromJson$1
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with Collections.emptyList for com/yubico/webauthn/RegistrationResult::lambda$fromJson$1 → KILLED

+
152 + + + +

1.1
Location : isUserVerified
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/RegistrationResult::isUserVerified → KILLED

2.2
Location : isUserVerified
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/RegistrationResult::isUserVerified → KILLED

+
178 + + + +

1.1
Location : isBackupEligible
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/RegistrationResult::isBackupEligible → KILLED

2.2
Location : isBackupEligible
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/RegistrationResult::isBackupEligible → KILLED

+
203 + + + +

1.1
Location : isBackedUp
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/RegistrationResult::isBackedUp → KILLED

2.2
Location : isBackedUp
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/RegistrationResult::isBackedUp → KILLED

+
217 + + + +

1.1
Location : getAuthenticatorAttachment
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAuthenticatorAttachment → KILLED

+
230 + + + +

1.1
Location : getSignatureCount
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced long return with 0 for com/yubico/webauthn/RegistrationResult::getSignatureCount → KILLED

+
248 + + + +

1.1
Location : getKeyId
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/RegistrationResult::getKeyId → KILLED

+
265 + + + +

1.1
Location : getAaguid
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/RegistrationResult::getAaguid → KILLED

+
284 + + + +

1.1
Location : getPublicKeyCose
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/RegistrationResult::getPublicKeyCose → KILLED

+
303 + + + +

1.1
Location : getParsedPublicKey
Killed by : none
replaced return value with null for com/yubico/webauthn/RegistrationResult::getParsedPublicKey → NO_COVERAGE

+
321 + + + +

1.1
Location : getClientExtensionOutputs
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getClientExtensionOutputs → KILLED

+
322 + + + +

1.1
Location : lambda$getClientExtensionOutputs$2
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : lambda$getClientExtensionOutputs$2
Killed by : none
replaced boolean return with true for com/yubico/webauthn/RegistrationResult::lambda$getClientExtensionOutputs$2 → SURVIVED

+
340 + + + +

1.1
Location : getAuthenticatorExtensionOutputs
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAuthenticatorExtensionOutputs → KILLED

+
366 + + + +

1.1
Location : isDiscoverable
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::isDiscoverable → KILLED

+
367 + + + +

1.1
Location : lambda$isDiscoverable$3
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::lambda$isDiscoverable$3 → KILLED

+
368 + + + +

1.1
Location : lambda$isDiscoverable$4
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::lambda$isDiscoverable$4 → KILLED

+
388 + + + +

1.1
Location : getAttestationTrustPath
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAttestationTrustPath → KILLED

+
393 + + + +

1.1
Location : getAttestationTrustPathJson
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAttestationTrustPathJson → KILLED

+
400 + + + +

1.1
Location : lambda$getAttestationTrustPathJson$5
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with "" for com/yubico/webauthn/RegistrationResult::lambda$getAttestationTrustPathJson$5 → KILLED

+
405 + + + +

1.1
Location : lambda$getAttestationTrustPathJson$6
Killed by : com.yubico.webauthn.data.JsonIoSpec
replaced return value with Collections.emptyList for com/yubico/webauthn/RegistrationResult::lambda$getAttestationTrustPathJson$6 → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RelyingParty.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RelyingParty.java.html new file mode 100644 index 000000000..957998cd8 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RelyingParty.java.html @@ -0,0 +1,12187 @@ + + + + + + + + + +

RelyingParty.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +28 + + + + + + +
import com.yubico.internal.util.OptionalUtil;
+ +29 + + + + + + +
import com.yubico.webauthn.attestation.AttestationTrustSource;
+ +30 + + + + + + +
import com.yubico.webauthn.data.AssertionExtensionInputs;
+ +31 + + + + + + +
import com.yubico.webauthn.data.AttestationConveyancePreference;
+ +32 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorData;
+ +33 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +34 + + + + + + +
import com.yubico.webauthn.data.CollectedClientData;
+ +35 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions;
+ +36 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions.PublicKeyCredentialCreationOptionsBuilder;
+ +37 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialParameters;
+ +38 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialRequestOptions;
+ +39 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialRequestOptions.PublicKeyCredentialRequestOptionsBuilder;
+ +40 + + + + + + +
import com.yubico.webauthn.data.RegistrationExtensionInputs;
+ +41 + + + + + + +
import com.yubico.webauthn.data.RelyingPartyIdentity;
+ +42 + + + + + + +
import com.yubico.webauthn.exception.AssertionFailedException;
+ +43 + + + + + + +
import com.yubico.webauthn.exception.InvalidSignatureCountException;
+ +44 + + + + + + +
import com.yubico.webauthn.exception.RegistrationFailedException;
+ +45 + + + + + + +
import com.yubico.webauthn.extension.appid.AppId;
+ +46 + + + + + + +
import java.net.MalformedURLException;
+ +47 + + + + + + +
import java.net.URL;
+ +48 + + + + + + +
import java.security.KeyFactory;
+ +49 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +50 + + + + + + +
import java.security.SecureRandom;
+ +51 + + + + + + +
import java.security.Signature;
+ +52 + + + + + + +
import java.time.Clock;
+ +53 + + + + + + +
import java.util.ArrayList;
+ +54 + + + + + + +
import java.util.Arrays;
+ +55 + + + + + + +
import java.util.Collections;
+ +56 + + + + + + +
import java.util.List;
+ +57 + + + + + + +
import java.util.Optional;
+ +58 + + + + + + +
import java.util.Set;
+ +59 + + + + + + +
import java.util.stream.Collectors;
+ +60 + + + + + + +
import lombok.Builder;
+ +61 + + + + + + +
import lombok.NonNull;
+ +62 + + + + + + +
import lombok.Value;
+ +63 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +64 + + + + + + +
+ +65 + + + + + + +
/**
+ +66 + + + + + + +
 * Encapsulates the four basic Web Authentication operations - start/finish registration,
+ +67 + + + + + + +
 * start/finish authentication - along with overall operational settings for them.
+ +68 + + + + + + +
 *
+ +69 + + + + + + +
 * <p>This class has no mutable state. An instance of this class may therefore be thought of as a
+ +70 + + + + + + +
 * container for specialized versions (function closures) of these four operations rather than a
+ +71 + + + + + + +
 * stateful object.
+ +72 + + + + + + +
 */
+ +73 + + + + + + +
@Slf4j
+ +74 + + + + + + +
@Builder(toBuilder = true)
+ +75 + + + + + + +
@Value
+ +76 + + + + + + +
public class RelyingParty {
+ +77 + + + + + + +
+ +78 + + + + + + +
  private static final SecureRandom random = new SecureRandom();
+ +79 + + + + + + +
+ +80 + + + + + + +
  /**
+ +81 + + + + + + +
   * The {@link RelyingPartyIdentity} that will be set as the {@link
+ +82 + + + + + + +
   * PublicKeyCredentialCreationOptions#getRp() rp} parameter when initiating registration
+ +83 + + + + + + +
   * operations, and which {@link AuthenticatorData#getRpIdHash()} will be compared against. This is
+ +84 + + + + + + +
   * a required parameter.
+ +85 + + + + + + +
   *
+ +86 + + + + + + +
   * <p>A successful registration or authentication operation requires {@link
+ +87 + + + + + + +
   * AuthenticatorData#getRpIdHash()} to exactly equal the SHA-256 hash of this member's {@link
+ +88 + + + + + + +
   * RelyingPartyIdentity#getId() id} member. Alternatively, it may instead equal the SHA-256 hash
+ +89 + + + + + + +
   * of {@link #getAppId() appId} if the latter is present.
+ +90 + + + + + + +
   *
+ +91 + + + + + + +
   * @see #startRegistration(StartRegistrationOptions)
+ +92 + + + + + + +
   * @see PublicKeyCredentialCreationOptions
+ +93 + + + + + + +
   */
+ +94 + + + + + + +
  @NonNull private final RelyingPartyIdentity identity;
+ +95 + + + + + + +
+ +96 + + + + + + +
  /**
+ +97 + + + + + + +
   * The allowed origins that returned authenticator responses will be compared against.
+ +98 + + + + + + +
   *
+ +99 + + + + + + +
   * <p>The default is the set containing only the string <code>
+ +100 + + + + + + +
   * "https://" + {@link #getIdentity()}.getId()</code>.
+ +101 + + + + + + +
   *
+ +102 + + + + + + +
   * <p>If {@link RelyingPartyBuilder#allowOriginPort(boolean) allowOriginPort} and {@link
+ +103 + + + + + + +
   * RelyingPartyBuilder#allowOriginSubdomain(boolean) allowOriginSubdomain} are both <code>false
+ +104 + + + + + + +
   * </code> (the default), then a successful registration or authentication operation requires
+ +105 + + + + + + +
   * {@link CollectedClientData#getOrigin()} to exactly equal one of these values.
+ +106 + + + + + + +
   *
+ +107 + + + + + + +
   * <p>If {@link RelyingPartyBuilder#allowOriginPort(boolean) allowOriginPort} is <code>true</code>
+ +108 + + + + + + +
   * , then the above rule is relaxed to allow any port number in {@link
+ +109 + + + + + + +
   * CollectedClientData#getOrigin()}, regardless of any port specified.
+ +110 + + + + + + +
   *
+ +111 + + + + + + +
   * <p>If {@link RelyingPartyBuilder#allowOriginSubdomain(boolean) allowOriginSubdomain} is <code>
+ +112 + + + + + + +
   * true</code>, then the above rule is relaxed to allow any subdomain, of any depth, of any of
+ +113 + + + + + + +
   * these values.
+ +114 + + + + + + +
   *
+ +115 + + + + + + +
   * <p>For either of the above relaxations to take effect, both the allowed origin and the client
+ +116 + + + + + + +
   * data origin must be valid URLs. Origins that are not valid URLs are matched only by exact
+ +117 + + + + + + +
   * string equality.
+ +118 + + + + + + +
   *
+ +119 + + + + + + +
   * @see #getIdentity()
+ +120 + + + + + + +
   */
+ +121 + + + + + + +
  @NonNull private final Set<String> origins;
+ +122 + + + + + + +
+ +123 + + + + + + +
  /**
+ +124 + + + + + + +
   * An abstract database which can look up credentials, usernames and user handles from usernames,
+ +125 + + + + + + +
   * user handles and credential IDs. This is a required parameter.
+ +126 + + + + + + +
   *
+ +127 + + + + + + +
   * <p>This is used to look up:
+ +128 + + + + + + +
   *
+ +129 + + + + + + +
   * <ul>
+ +130 + + + + + + +
   *   <li>the user handle for a user logging in via user name
+ +131 + + + + + + +
   *   <li>the user name for a user logging in via user handle
+ +132 + + + + + + +
   *   <li>the credential IDs to include in {@link
+ +133 + + + + + + +
   *       PublicKeyCredentialCreationOptions#getExcludeCredentials()}
+ +134 + + + + + + +
   *   <li>the credential IDs to include in {@link
+ +135 + + + + + + +
   *       PublicKeyCredentialRequestOptions#getAllowCredentials()}
+ +136 + + + + + + +
   *   <li>that the correct user owns the credential when verifying an assertion
+ +137 + + + + + + +
   *   <li>the public key to use to verify an assertion
+ +138 + + + + + + +
   *   <li>the stored signature counter when verifying an assertion
+ +139 + + + + + + +
   * </ul>
+ +140 + + + + + + +
   */
+ +141 + + + + + + +
  @NonNull private final CredentialRepository credentialRepository;
+ +142 + + + + + + +
+ +143 + + + + + + +
  /**
+ +144 + + + + + + +
   * The extension input to set for the <code>appid</code> and <code>appidExclude</code> extensions.
+ +145 + + + + + + +
   *
+ +146 + + + + + + +
   * <p>You do not need this extension if you have not previously supported U2F. Its purpose is to
+ +147 + + + + + + +
   * make already-registered U2F credentials forward-compatible with the WebAuthn API. It is not
+ +148 + + + + + + +
   * needed for new registrations, even of U2F authenticators.
+ +149 + + + + + + +
   *
+ +150 + + + + + + +
   * <p>If this member is set, {@link #startAssertion(StartAssertionOptions) startAssertion} will
+ +151 + + + + + + +
   * automatically set the <code>appid</code> extension input, and {@link
+ +152 + + + + + + +
   * #finishAssertion(FinishAssertionOptions) finishAssertion} will adjust its verification logic to
+ +153 + + + + + + +
   * also accept this AppID as an alternative to the RP ID. Likewise, {@link
+ +154 + + + + + + +
   * #startRegistration(StartRegistrationOptions)} startRegistration} will automatically set the
+ +155 + + + + + + +
   * <code>appidExclude</code> extension input.
+ +156 + + + + + + +
   *
+ +157 + + + + + + +
   * <p>By default, this is not set.
+ +158 + + + + + + +
   *
+ +159 + + + + + + +
   * @see AssertionExtensionInputs#getAppid()
+ +160 + + + + + + +
   * @see RegistrationExtensionInputs#getAppidExclude()
+ +161 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +162 + + + + + + +
   *     FIDO AppID Extension (appid)</a>
+ +163 + + + + + + +
   * @see <a
+ +164 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.
+ +165 + + + + + + +
   *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +166 + + + + + + +
   */
+ +167 + + + + + + +
  @NonNull private final Optional<AppId> appId;
+ +168 + + + + + + +
+ +169 + + + + + + +
  /**
+ +170 + + + + + + +
   * The argument for the {@link PublicKeyCredentialCreationOptions#getAttestation() attestation}
+ +171 + + + + + + +
   * parameter in registration operations.
+ +172 + + + + + + +
   *
+ +173 + + + + + + +
   * <p>Unless your application has a concrete policy for authenticator attestation, it is
+ +174 + + + + + + +
   * recommended to leave this parameter undefined.
+ +175 + + + + + + +
   *
+ +176 + + + + + + +
   * <p>If you set this, you may want to explicitly set {@link
+ +177 + + + + + + +
   * RelyingPartyBuilder#allowUntrustedAttestation(boolean) allowUntrustedAttestation} and {@link
+ +178 + + + + + + +
   * RelyingPartyBuilder#attestationTrustSource(AttestationTrustSource) attestationTrustSource} too.
+ +179 + + + + + + +
   *
+ +180 + + + + + + +
   * <p>By default, this is not set.
+ +181 + + + + + + +
   *
+ +182 + + + + + + +
   * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +183 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +184 + + + + + + +
   *     Attestation</a>
+ +185 + + + + + + +
   */
+ +186 + + + + + + +
  @NonNull private final Optional<AttestationConveyancePreference> attestationConveyancePreference;
+ +187 + + + + + + +
+ +188 + + + + + + +
  /**
+ +189 + + + + + + +
   * An {@link AttestationTrustSource} instance to use for looking up trust roots for authenticator
+ +190 + + + + + + +
   * attestation. This matters only if {@link #getAttestationConveyancePreference()} is non-empty
+ +191 + + + + + + +
   * and not set to {@link AttestationConveyancePreference#NONE}.
+ +192 + + + + + + +
   *
+ +193 + + + + + + +
   * <p>By default, this is not set.
+ +194 + + + + + + +
   *
+ +195 + + + + + + +
   * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +196 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +197 + + + + + + +
   *     Attestation</a>
+ +198 + + + + + + +
   */
+ +199 + + + + + + +
  @NonNull private final Optional<AttestationTrustSource> attestationTrustSource;
+ +200 + + + + + + +
+ +201 + + + + + + +
  /**
+ +202 + + + + + + +
   * The argument for the {@link PublicKeyCredentialCreationOptions#getPubKeyCredParams()
+ +203 + + + + + + +
   * pubKeyCredParams} parameter in registration operations.
+ +204 + + + + + + +
   *
+ +205 + + + + + + +
   * <p>This is a list of acceptable public key algorithms and their parameters, ordered from most
+ +206 + + + + + + +
   * to least preferred.
+ +207 + + + + + + +
   *
+ +208 + + + + + + +
   * <p>The default is the following list, in order:
+ +209 + + + + + + +
   *
+ +210 + + + + + + +
   * <ol>
+ +211 + + + + + + +
   *   <li>{@link com.yubico.webauthn.data.PublicKeyCredentialParameters#ES256 ES256}
+ +212 + + + + + + +
   *   <li>{@link com.yubico.webauthn.data.PublicKeyCredentialParameters#EdDSA EdDSA}
+ +213 + + + + + + +
   *   <li>{@link com.yubico.webauthn.data.PublicKeyCredentialParameters#ES256 ES384}
+ +214 + + + + + + +
   *   <li>{@link com.yubico.webauthn.data.PublicKeyCredentialParameters#ES256 ES512}
+ +215 + + + + + + +
   *   <li>{@link com.yubico.webauthn.data.PublicKeyCredentialParameters#RS256 RS256}
+ +216 + + + + + + +
   *   <li>{@link com.yubico.webauthn.data.PublicKeyCredentialParameters#RS384 RS384}
+ +217 + + + + + + +
   *   <li>{@link com.yubico.webauthn.data.PublicKeyCredentialParameters#RS512 RS512}
+ +218 + + + + + + +
   * </ol>
+ +219 + + + + + + +
   *
+ +220 + + + + + + +
   * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +221 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +222 + + + + + + +
   *     Attestation</a>
+ +223 + + + + + + +
   */
+ +224 + + + + + + +
  @Builder.Default @NonNull
+ +225 + + + + + + +
  private final List<PublicKeyCredentialParameters> preferredPubkeyParams =
+ +226 + + + + + + +
      Collections.unmodifiableList(
+ +227 + + + + + + +
          Arrays.asList(
+ +228 + + + + + + +
              PublicKeyCredentialParameters.ES256,
+ +229 + + + + + + +
              PublicKeyCredentialParameters.EdDSA,
+ +230 + + + + + + +
              PublicKeyCredentialParameters.ES384,
+ +231 + + + + + + +
              PublicKeyCredentialParameters.ES512,
+ +232 + + + + + + +
              PublicKeyCredentialParameters.RS256,
+ +233 + + + + + + +
              PublicKeyCredentialParameters.RS384,
+ +234 + + + + + + +
              PublicKeyCredentialParameters.RS512));
+ +235 + + + + + + +
+ +236 + + + + + + +
  /**
+ +237 + + + + + + +
   * If <code>true</code>, the origin matching rule is relaxed to allow any port number.
+ +238 + + + + + + +
   *
+ +239 + + + + + + +
   * <p>The default is <code>false</code>.
+ +240 + + + + + + +
   *
+ +241 + + + + + + +
   * <p>Examples with <code>
+ +242 + + + + + + +
   * origins: ["https://example.org", "https://accounts.example.org", "https://acme.com:8443"]
+ +243 + + + + + + +
   * </code>
+ +244 + + + + + + +
   *
+ +245 + + + + + + +
   * <ul>
+ +246 + + + + + + +
   *   <li>
+ +247 + + + + + + +
   *       <p><code>allowOriginPort: false</code>
+ +248 + + + + + + +
   *       <p>Accepted:
+ +249 + + + + + + +
   *       <ul>
+ +250 + + + + + + +
   *         <li><code>https://example.org</code>
+ +251 + + + + + + +
   *         <li><code>https://accounts.example.org</code>
+ +252 + + + + + + +
   *         <li><code>https://acme.com:8443</code>
+ +253 + + + + + + +
   *       </ul>
+ +254 + + + + + + +
   *       <p>Rejected:
+ +255 + + + + + + +
   *       <ul>
+ +256 + + + + + + +
   *         <li><code>https://example.org:8443</code>
+ +257 + + + + + + +
   *         <li><code>https://shop.example.org</code>
+ +258 + + + + + + +
   *         <li><code>https://acme.com</code>
+ +259 + + + + + + +
   *         <li><code>https://acme.com:9000</code>
+ +260 + + + + + + +
   *       </ul>
+ +261 + + + + + + +
   *   <li>
+ +262 + + + + + + +
   *       <p><code>allowOriginPort: true</code>
+ +263 + + + + + + +
   *       <p>Accepted:
+ +264 + + + + + + +
   *       <ul>
+ +265 + + + + + + +
   *         <li><code>https://example.org</code>
+ +266 + + + + + + +
   *         <li><code>https://example.org:8443</code>
+ +267 + + + + + + +
   *         <li><code>https://accounts.example.org</code>
+ +268 + + + + + + +
   *         <li><code>https://acme.com</code>
+ +269 + + + + + + +
   *         <li><code>https://acme.com:8443</code>
+ +270 + + + + + + +
   *         <li><code>https://acme.com:9000</code>
+ +271 + + + + + + +
   *       </ul>
+ +272 + + + + + + +
   *       <p>Rejected:
+ +273 + + + + + + +
   *       <ul>
+ +274 + + + + + + +
   *         <li><code>https://shop.example.org</code>
+ +275 + + + + + + +
   *       </ul>
+ +276 + + + + + + +
   * </ul>
+ +277 + + + + + + +
   */
+ +278 + + + + + + +
  @Builder.Default private final boolean allowOriginPort = false;
+ +279 + + + + + + +
+ +280 + + + + + + +
  /**
+ +281 + + + + + + +
   * If <code>true</code>, the origin matching rule is relaxed to allow any subdomain, of any depth,
+ +282 + + + + + + +
   * of the values of {@link RelyingPartyBuilder#origins(Set) origins}.
+ +283 + + + + + + +
   *
+ +284 + + + + + + +
   * <p>Please see <a
+ +285 + + + + + + +
   * href="https://www.w3.org/TR/2023/WD-webauthn-3-20230927/#sctn-code-injection">Security
+ +286 + + + + + + +
   * Considerations: Code injection attacks</a> for discussion of the risks in setting this to
+ +287 + + + + + + +
   * <code>true</code>.
+ +288 + + + + + + +
   *
+ +289 + + + + + + +
   * <p>The default is <code>false</code>.
+ +290 + + + + + + +
   *
+ +291 + + + + + + +
   * <p>Examples with <code>origins: ["https://example.org", "https://acme.com:8443"]</code>
+ +292 + + + + + + +
   *
+ +293 + + + + + + +
   * <ul>
+ +294 + + + + + + +
   *   <li>
+ +295 + + + + + + +
   *       <p><code>allowOriginSubdomain: false</code>
+ +296 + + + + + + +
   *       <p>Accepted:
+ +297 + + + + + + +
   *       <ul>
+ +298 + + + + + + +
   *         <li><code>https://example.org</code>
+ +299 + + + + + + +
   *         <li><code>https://acme.com:8443</code>
+ +300 + + + + + + +
   *       </ul>
+ +301 + + + + + + +
   *       <p>Rejected:
+ +302 + + + + + + +
   *       <ul>
+ +303 + + + + + + +
   *         <li><code>https://example.org:8443</code>
+ +304 + + + + + + +
   *         <li><code>https://accounts.example.org</code>
+ +305 + + + + + + +
   *         <li><code>https://acme.com</code>
+ +306 + + + + + + +
   *         <li><code>https://eu.shop.acme.com:8443</code>
+ +307 + + + + + + +
   *       </ul>
+ +308 + + + + + + +
   *   <li>
+ +309 + + + + + + +
   *       <p><code>allowOriginSubdomain: true</code>
+ +310 + + + + + + +
   *       <p>Accepted:
+ +311 + + + + + + +
   *       <ul>
+ +312 + + + + + + +
   *         <li><code>https://example.org</code>
+ +313 + + + + + + +
   *         <li><code>https://accounts.example.org</code>
+ +314 + + + + + + +
   *         <li><code>https://acme.com:8443</code>
+ +315 + + + + + + +
   *         <li><code>https://eu.shop.acme.com:8443</code>
+ +316 + + + + + + +
   *       </ul>
+ +317 + + + + + + +
   *       <p>Rejected:
+ +318 + + + + + + +
   *       <ul>
+ +319 + + + + + + +
   *         <li><code>https://example.org:8443</code>
+ +320 + + + + + + +
   *         <li><code>https://acme.com</code>
+ +321 + + + + + + +
   *       </ul>
+ +322 + + + + + + +
   * </ul>
+ +323 + + + + + + +
   *
+ +324 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2023/WD-webauthn-3-20230927/#sctn-code-injection">§13.4.8.
+ +325 + + + + + + +
   *     Code injection attacks</a>
+ +326 + + + + + + +
   */
+ +327 + + + + + + +
  @Builder.Default private final boolean allowOriginSubdomain = false;
+ +328 + + + + + + +
+ +329 + + + + + + +
  /**
+ +330 + + + + + + +
   * If <code>false</code>, {@link #finishRegistration(FinishRegistrationOptions)
+ +331 + + + + + + +
   * finishRegistration} will only allow registrations where the attestation signature can be linked
+ +332 + + + + + + +
   * to a trusted attestation root. This excludes none attestation, and self attestation unless the
+ +333 + + + + + + +
   * self attestation key is explicitly trusted.
+ +334 + + + + + + +
   *
+ +335 + + + + + + +
   * <p>Regardless of the value of this option, invalid attestation statements of supported formats
+ +336 + + + + + + +
   * will always be rejected. For example, a "packed" attestation statement with an invalid
+ +337 + + + + + + +
   * signature will be rejected even if this option is set to <code>true</code>.
+ +338 + + + + + + +
   *
+ +339 + + + + + + +
   * <p>The default is <code>true</code>.
+ +340 + + + + + + +
   */
+ +341 + + + + + + +
  @Builder.Default private final boolean allowUntrustedAttestation = true;
+ +342 + + + + + + +
+ +343 + + + + + + +
  /**
+ +344 + + + + + + +
   * If <code>true</code>, {@link #finishAssertion(FinishAssertionOptions) finishAssertion} will
+ +345 + + + + + + +
   * succeed only if the {@link AuthenticatorData#getSignatureCounter() signature counter value} in
+ +346 + + + + + + +
   * the response is strictly greater than the {@link RegisteredCredential#getSignatureCount()
+ +347 + + + + + + +
   * stored signature counter value}, or if both counters are exactly zero.
+ +348 + + + + + + +
   *
+ +349 + + + + + + +
   * <p>The default is <code>true</code>.
+ +350 + + + + + + +
   */
+ +351 + + + + + + +
  @Builder.Default private final boolean validateSignatureCounter = true;
+ +352 + + + + + + +
+ +353 + + + + + + +
  /**
+ +354 + + + + + + +
   * A {@link Clock} which will be used to tell the current time while verifying attestation
+ +355 + + + + + + +
   * certificate chains.
+ +356 + + + + + + +
   *
+ +357 + + + + + + +
   * <p>This is intended primarily for testing, and relevant only if {@link
+ +358 + + + + + + +
   * RelyingPartyBuilder#attestationTrustSource(AttestationTrustSource)} is set.
+ +359 + + + + + + +
   *
+ +360 + + + + + + +
   * <p>The default is <code>Clock.systemUTC()</code>.
+ +361 + + + + + + +
   */
+ +362 + + + + + + +
  @Builder.Default @NonNull private final Clock clock = Clock.systemUTC();
+ +363 + + + + + + +
+ +364 + + + + + + +
  @Builder
+ +365 + + + + + + +
  private RelyingParty(
+ +366 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull RelyingPartyIdentity identity,
+ +367 + + + + + + +
      Set<String> origins,
+ +368 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull CredentialRepository credentialRepository,
+ +369 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Optional<AppId> appId,
+ +370 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Optional<AttestationConveyancePreference> attestationConveyancePreference,
+ +371 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Optional<AttestationTrustSource> attestationTrustSource,
+ +372 + + + + + + +
      List<PublicKeyCredentialParameters> preferredPubkeyParams,
+ +373 + + + + + + +
      boolean allowOriginPort,
+ +374 + + + + + + +
      boolean allowOriginSubdomain,
+ +375 + + + + + + +
      boolean allowUntrustedAttestation,
+ +376 + + + + + + +
      boolean validateSignatureCounter,
+ +377 + + + + + + +
      Clock clock) {
+ +378 + + + + + + +
    this.identity = identity;
+ +379 + + + + + + +
    this.origins =
+ +380 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        origins != null
+ +381 + + + + + + +
            ? CollectionUtil.immutableSet(origins)
+ +382 + + + + + + +
            : Collections.singleton("https://" + identity.getId());
+ +383 + + + + + + +
+ +384 + + + + + + +
    for (String origin : this.origins) {
+ +385 + + + + + + +
      try {
+ +386 + + + + + + +
        new URL(origin);
+ +387 + + + + + + +
      } catch (MalformedURLException e) {
+ +388 + + + + + + +
        log.warn(
+ +389 + + + + + + +
            "Allowed origin is not a valid URL, it will match only by exact string equality: {}",
+ +390 + + + + + + +
            origin);
+ +391 + + + + + + +
      }
+ +392 + + + + + + +
    }
+ +393 + + + + + + +
+ +394 + + + + + + +
    this.credentialRepository = credentialRepository;
+ +395 + + + + + + +
    this.appId = appId;
+ +396 + + + + + + +
    this.attestationConveyancePreference = attestationConveyancePreference;
+ +397 + + + + + + +
    this.attestationTrustSource = attestationTrustSource;
+ +398 + + + + + + +
    this.preferredPubkeyParams = filterAvailableAlgorithms(preferredPubkeyParams);
+ +399 + + + + + + +
    this.allowOriginPort = allowOriginPort;
+ +400 + + + + + + +
    this.allowOriginSubdomain = allowOriginSubdomain;
+ +401 + + + + + + +
    this.allowUntrustedAttestation = allowUntrustedAttestation;
+ +402 + + + + + + +
    this.validateSignatureCounter = validateSignatureCounter;
+ +403 + + + + + + +
    this.clock = clock;
+ +404 + + + + + + +
  }
+ +405 + + + + + + +
+ +406 + + + + + + +
  private static ByteArray generateChallenge() {
+ +407 + + + + + + +
    byte[] bytes = new byte[32];
+ +408 + + +1 + +1. generateChallenge : removed call to java/security/SecureRandom::nextBytes → KILLED
+ +
+
+
    random.nextBytes(bytes);
+ +409 + + +1 + +1. generateChallenge : replaced return value with null for com/yubico/webauthn/RelyingParty::generateChallenge → KILLED
+ +
+
+
    return new ByteArray(bytes);
+ +410 + + + + + + +
  }
+ +411 + + + + + + +
+ +412 + + + + + + +
  /**
+ +413 + + + + + + +
   * Filter <code>pubKeyCredParams</code> to only contain algorithms with a {@link KeyFactory} and a
+ +414 + + + + + + +
   * {@link Signature} available, and log a warning for every unsupported algorithm.
+ +415 + + + + + + +
   *
+ +416 + + + + + + +
   * @return a new {@link List} containing only the algorithms supported in the current JCA context.
+ +417 + + + + + + +
   */
+ +418 + + + + + + +
  static List<PublicKeyCredentialParameters> filterAvailableAlgorithms(
+ +419 + + + + + + +
      List<PublicKeyCredentialParameters> pubKeyCredParams) {
+ +420 + + +1 + +1. filterAvailableAlgorithms : replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingParty::filterAvailableAlgorithms → KILLED
+ +
+
+
    return Collections.unmodifiableList(
+ +421 + + + + + + +
        pubKeyCredParams.stream()
+ +422 + + + + + + +
            .filter(
+ +423 + + + + + + +
                param -> {
+ +424 + + + + + + +
                  try {
+ +425 + + + + + + +
                    switch (param.getAlg()) {
+ +426 + + + + + + +
                      case EdDSA:
+ +427 + + + + + + +
                        KeyFactory.getInstance("EdDSA");
+ +428 + + + + + + +
                        break;
+ +429 + + + + + + +
+ +430 + + + + + + +
                      case ES256:
+ +431 + + + + + + +
                      case ES384:
+ +432 + + + + + + +
                      case ES512:
+ +433 + + + + + + +
                        KeyFactory.getInstance("EC");
+ +434 + + + + + + +
                        break;
+ +435 + + + + + + +
+ +436 + + + + + + +
                      case RS256:
+ +437 + + + + + + +
                      case RS384:
+ +438 + + + + + + +
                      case RS512:
+ +439 + + + + + + +
                      case RS1:
+ +440 + + + + + + +
                        KeyFactory.getInstance("RSA");
+ +441 + + + + + + +
                        break;
+ +442 + + + + + + +
+ +443 + + + + + + +
                      default:
+ +444 + + + + + + +
                        log.warn(
+ +445 + + + + + + +
                            "Unknown algorithm: {}. Please file a bug report.", param.getAlg());
+ +446 + + + + + + +
                    }
+ +447 + + + + + + +
                  } catch (NoSuchAlgorithmException e) {
+ +448 + + + + + + +
                    log.warn(
+ +449 + + + + + + +
                        "Unsupported algorithm in RelyingParty.preferredPubkeyParams: {}. No KeyFactory available; registrations with this key algorithm will fail. You may need to add a dependency and load a provider using java.security.Security.addProvider().",
+ +450 + + + + + + +
                        param.getAlg());
+ +451 + + +1 + +1. lambda$filterAvailableAlgorithms$0 : replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 → KILLED
+ +
+
+
                    return false;
+ +452 + + + + + + +
                  }
+ +453 + + + + + + +
+ +454 + + + + + + +
                  final String signatureAlgName;
+ +455 + + + + + + +
                  try {
+ +456 + + + + + + +
                    signatureAlgName = WebAuthnCodecs.getJavaAlgorithmName(param.getAlg());
+ +457 + + + + + + +
                  } catch (IllegalArgumentException e) {
+ +458 + + + + + + +
                    log.warn("Unknown algorithm: {}. Please file a bug report.", param.getAlg());
+ +459 + + +1 + +1. lambda$filterAvailableAlgorithms$0 : replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 → NO_COVERAGE
+ +
+
+
                    return false;
+ +460 + + + + + + +
                  }
+ +461 + + + + + + +
+ +462 + + + + + + +
                  try {
+ +463 + + + + + + +
                    Signature.getInstance(signatureAlgName);
+ +464 + + + + + + +
                  } catch (NoSuchAlgorithmException e) {
+ +465 + + + + + + +
                    log.warn(
+ +466 + + + + + + +
                        "Unsupported algorithm in RelyingParty.preferredPubkeyParams: {}. No Signature available; registrations with this key algorithm will fail. You may need to add a dependency and load a provider using java.security.Security.addProvider().",
+ +467 + + + + + + +
                        param.getAlg());
+ +468 + + +1 + +1. lambda$filterAvailableAlgorithms$0 : replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 → NO_COVERAGE
+ +
+
+
                    return false;
+ +469 + + + + + + +
                  }
+ +470 + + + + + + +
+ +471 + + +1 + +1. lambda$filterAvailableAlgorithms$0 : replaced boolean return with false for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 → KILLED
+ +
+
+
                  return true;
+ +472 + + + + + + +
                })
+ +473 + + + + + + +
            .collect(Collectors.toList()));
+ +474 + + + + + + +
  }
+ +475 + + + + + + +
+ +476 + + + + + + +
  public PublicKeyCredentialCreationOptions startRegistration(
+ +477 + + + + + + +
      StartRegistrationOptions startRegistrationOptions) {
+ +478 + + + + + + +
    PublicKeyCredentialCreationOptionsBuilder builder =
+ +479 + + + + + + +
        PublicKeyCredentialCreationOptions.builder()
+ +480 + + + + + + +
            .rp(identity)
+ +481 + + + + + + +
            .user(startRegistrationOptions.getUser())
+ +482 + + + + + + +
            .challenge(generateChallenge())
+ +483 + + + + + + +
            .pubKeyCredParams(preferredPubkeyParams)
+ +484 + + + + + + +
            .excludeCredentials(
+ +485 + + + + + + +
                credentialRepository.getCredentialIdsForUsername(
+ +486 + + + + + + +
                    startRegistrationOptions.getUser().getName()))
+ +487 + + + + + + +
            .authenticatorSelection(startRegistrationOptions.getAuthenticatorSelection())
+ +488 + + + + + + +
            .extensions(
+ +489 + + + + + + +
                startRegistrationOptions
+ +490 + + + + + + +
                    .getExtensions()
+ +491 + + + + + + +
                    .merge(
+ +492 + + + + + + +
                        RegistrationExtensionInputs.builder()
+ +493 + + + + + + +
                            .appidExclude(appId)
+ +494 + + + + + + +
                            .credProps()
+ +495 + + + + + + +
                            .build()))
+ +496 + + + + + + +
            .timeout(startRegistrationOptions.getTimeout());
+ +497 + + +1 + +1. startRegistration : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
    attestationConveyancePreference.ifPresent(builder::attestation);
+ +498 + + +1 + +1. startRegistration : replaced return value with null for com/yubico/webauthn/RelyingParty::startRegistration → KILLED
+ +
+
+
    return builder.build();
+ +499 + + + + + + +
  }
+ +500 + + + + + + +
+ +501 + + + + + + +
  public RegistrationResult finishRegistration(FinishRegistrationOptions finishRegistrationOptions)
+ +502 + + + + + + +
      throws RegistrationFailedException {
+ +503 + + + + + + +
    try {
+ +504 + + +1 + +1. finishRegistration : replaced return value with null for com/yubico/webauthn/RelyingParty::finishRegistration → KILLED
+ +
+
+
      return _finishRegistration(finishRegistrationOptions).run();
+ +505 + + + + + + +
    } catch (IllegalArgumentException e) {
+ +506 + + + + + + +
      throw new RegistrationFailedException(e);
+ +507 + + + + + + +
    }
+ +508 + + + + + + +
  }
+ +509 + + + + + + +
+ +510 + + + + + + +
  /**
+ +511 + + + + + + +
   * This method is NOT part of the public API.
+ +512 + + + + + + +
   *
+ +513 + + + + + + +
   * <p>This method is called internally by {@link #finishRegistration(FinishRegistrationOptions)}.
+ +514 + + + + + + +
   * It is a separate method to facilitate testing; users should call {@link
+ +515 + + + + + + +
   * #finishRegistration(FinishRegistrationOptions)} instead of this method.
+ +516 + + + + + + +
   */
+ +517 + + + + + + +
  FinishRegistrationSteps _finishRegistration(FinishRegistrationOptions options) {
+ +518 + + +1 + +1. _finishRegistration : replaced return value with null for com/yubico/webauthn/RelyingParty::_finishRegistration → KILLED
+ +
+
+
    return FinishRegistrationSteps.fromV1(this, options);
+ +519 + + + + + + +
  }
+ +520 + + + + + + +
+ +521 + + + + + + +
  public AssertionRequest startAssertion(StartAssertionOptions startAssertionOptions) {
+ +522 + + + + + + +
    PublicKeyCredentialRequestOptionsBuilder pkcro =
+ +523 + + + + + + +
        PublicKeyCredentialRequestOptions.builder()
+ +524 + + + + + + +
            .challenge(generateChallenge())
+ +525 + + + + + + +
            .rpId(identity.getId())
+ +526 + + + + + + +
            .allowCredentials(
+ +527 + + + + + + +
                OptionalUtil.orElseOptional(
+ +528 + + + + + + +
                        startAssertionOptions.getUsername(),
+ +529 + + + + + + +
                        () ->
+ +530 + + +1 + +1. lambda$startAssertion$1 : replaced return value with Optional.empty for com/yubico/webauthn/RelyingParty::lambda$startAssertion$1 → KILLED
+ +
+
+
                            startAssertionOptions
+ +531 + + + + + + +
                                .getUserHandle()
+ +532 + + + + + + +
                                .flatMap(credentialRepository::getUsernameForUserHandle))
+ +533 + + + + + + +
                    .map(
+ +534 + + + + + + +
                        un ->
+ +535 + + +1 + +1. lambda$startAssertion$2 : replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingParty::lambda$startAssertion$2 → KILLED
+ +
+
+
                            new ArrayList<>(credentialRepository.getCredentialIdsForUsername(un))))
+ +536 + + + + + + +
            .extensions(
+ +537 + + + + + + +
                startAssertionOptions
+ +538 + + + + + + +
                    .getExtensions()
+ +539 + + + + + + +
                    .merge(startAssertionOptions.getExtensions().toBuilder().appid(appId).build()))
+ +540 + + + + + + +
            .timeout(startAssertionOptions.getTimeout());
+ +541 + + + + + + +
+ +542 + + +1 + +1. startAssertion : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
    startAssertionOptions.getUserVerification().ifPresent(pkcro::userVerification);
+ +543 + + + + + + +
+ +544 + + +1 + +1. startAssertion : replaced return value with null for com/yubico/webauthn/RelyingParty::startAssertion → KILLED
+ +
+
+
    return AssertionRequest.builder()
+ +545 + + + + + + +
        .publicKeyCredentialRequestOptions(pkcro.build())
+ +546 + + + + + + +
        .username(startAssertionOptions.getUsername())
+ +547 + + + + + + +
        .userHandle(startAssertionOptions.getUserHandle())
+ +548 + + + + + + +
        .build();
+ +549 + + + + + + +
  }
+ +550 + + + + + + +
+ +551 + + + + + + +
  /**
+ +552 + + + + + + +
   * @throws InvalidSignatureCountException if {@link
+ +553 + + + + + + +
   *     RelyingPartyBuilder#validateSignatureCounter(boolean) validateSignatureCounter} is <code>
+ +554 + + + + + + +
   *     true</code>, the {@link AuthenticatorData#getSignatureCounter() signature count} in the
+ +555 + + + + + + +
   *     response is less than or equal to the {@link RegisteredCredential#getSignatureCount()
+ +556 + + + + + + +
   *     stored signature count}, and at least one of the signature count values is nonzero.
+ +557 + + + + + + +
   * @throws AssertionFailedException if validation fails for any other reason.
+ +558 + + + + + + +
   */
+ +559 + + + + + + +
  public AssertionResult finishAssertion(FinishAssertionOptions finishAssertionOptions)
+ +560 + + + + + + +
      throws AssertionFailedException {
+ +561 + + + + + + +
    try {
+ +562 + + +1 + +1. finishAssertion : replaced return value with null for com/yubico/webauthn/RelyingParty::finishAssertion → KILLED
+ +
+
+
      return _finishAssertion(finishAssertionOptions).run();
+ +563 + + + + + + +
    } catch (IllegalArgumentException e) {
+ +564 + + + + + + +
      throw new AssertionFailedException(e);
+ +565 + + + + + + +
    }
+ +566 + + + + + + +
  }
+ +567 + + + + + + +
+ +568 + + + + + + +
  /**
+ +569 + + + + + + +
   * This method is NOT part of the public API.
+ +570 + + + + + + +
   *
+ +571 + + + + + + +
   * <p>This method is called internally by {@link #finishAssertion(FinishAssertionOptions)}. It is
+ +572 + + + + + + +
   * a separate method to facilitate testing; users should call {@link
+ +573 + + + + + + +
   * #finishAssertion(FinishAssertionOptions)} instead of this method.
+ +574 + + + + + + +
   */
+ +575 + + + + + + +
  FinishAssertionSteps<RegisteredCredential> _finishAssertion(FinishAssertionOptions options) {
+ +576 + + +1 + +1. _finishAssertion : replaced return value with null for com/yubico/webauthn/RelyingParty::_finishAssertion → KILLED
+ +
+
+
    return FinishAssertionSteps.fromV1(this, options);
+ +577 + + + + + + +
  }
+ +578 + + + + + + +
+ +579 + + + + + + +
  public static RelyingPartyBuilder.MandatoryStages builder() {
+ +580 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/RelyingParty::builder → KILLED
+ +
+
+
    return new RelyingPartyBuilder.MandatoryStages();
+ +581 + + + + + + +
  }
+ +582 + + + + + + +
+ +583 + + + + + + +
  public static class RelyingPartyBuilder {
+ +584 + + + + + + +
    private @NonNull Optional<AppId> appId = Optional.empty();
+ +585 + + + + + + +
    private @NonNull Optional<AttestationConveyancePreference> attestationConveyancePreference =
+ +586 + + + + + + +
        Optional.empty();
+ +587 + + + + + + +
    private @NonNull Optional<AttestationTrustSource> attestationTrustSource = Optional.empty();
+ +588 + + + + + + +
+ +589 + + + + + + +
    public static class MandatoryStages {
+ +590 + + + + + + +
      private final RelyingPartyBuilder builder = new RelyingPartyBuilder();
+ +591 + + + + + + +
+ +592 + + + + + + +
      /**
+ +593 + + + + + + +
       * {@link RelyingPartyBuilder#identity(RelyingPartyIdentity) identity} is a required
+ +594 + + + + + + +
       * parameter.
+ +595 + + + + + + +
       *
+ +596 + + + + + + +
       * @see RelyingPartyBuilder#identity(RelyingPartyIdentity)
+ +597 + + + + + + +
       */
+ +598 + + + + + + +
      public Step2 identity(RelyingPartyIdentity identity) {
+ +599 + + + + + + +
        builder.identity(identity);
+ +600 + + +1 + +1. identity : replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages::identity → KILLED
+ +
+
+
        return new Step2();
+ +601 + + + + + + +
      }
+ +602 + + + + + + +
+ +603 + + + + + + +
      public class Step2 {
+ +604 + + + + + + +
        /**
+ +605 + + + + + + +
         * {@link RelyingPartyBuilder#credentialRepository(CredentialRepository)
+ +606 + + + + + + +
         * credentialRepository} is a required parameter.
+ +607 + + + + + + +
         *
+ +608 + + + + + + +
         * @see RelyingPartyBuilder#credentialRepository(CredentialRepository)
+ +609 + + + + + + +
         * @see #credentialRepositoryV2(CredentialRepositoryV2)
+ +610 + + + + + + +
         */
+ +611 + + + + + + +
        public RelyingPartyBuilder credentialRepository(CredentialRepository credentialRepository) {
+ +612 + + +1 + +1. credentialRepository : replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2::credentialRepository → KILLED
+ +
+
+
          return builder.credentialRepository(credentialRepository);
+ +613 + + + + + + +
        }
+ +614 + + + + + + +
+ +615 + + + + + + +
        /**
+ +616 + + + + + + +
         * {@link RelyingPartyBuilder#credentialRepository(CredentialRepository)
+ +617 + + + + + + +
         * credentialRepository} is a required parameter. This setter differs from {@link
+ +618 + + + + + + +
         * #credentialRepository(CredentialRepository)} in that it takes an instance of {@link
+ +619 + + + + + + +
         * CredentialRepositoryV2} and converts the builder's return type to {@link RelyingPartyV2}.
+ +620 + + + + + + +
         * {@link CredentialRepositoryV2} does not require the application to support usernames,
+ +621 + + + + + + +
         * unless {@link RelyingPartyV2.RelyingPartyV2Builder#usernameRepository(UsernameRepository)
+ +622 + + + + + + +
         * usernameRepository} is also set in a subsequent builder step.
+ +623 + + + + + + +
         *
+ +624 + + + + + + +
         * @see #credentialRepository(CredentialRepository)
+ +625 + + + + + + +
         * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be
+ +626 + + + + + + +
         *     deleted before reaching a mature release.
+ +627 + + + + + + +
         */
+ +628 + + + + + + +
        @Deprecated
+ +629 + + + + + + +
        public <C extends CredentialRecord>
+ +630 + + + + + + +
            RelyingPartyV2.RelyingPartyV2Builder<C> credentialRepositoryV2(
+ +631 + + + + + + +
                CredentialRepositoryV2<C> credentialRepository) {
+ +632 + + +1 + +1. credentialRepositoryV2 : replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2::credentialRepositoryV2 → KILLED
+ +
+
+
          return RelyingPartyV2.builder(builder.identity, credentialRepository);
+ +633 + + + + + + +
        }
+ +634 + + + + + + +
      }
+ +635 + + + + + + +
    }
+ +636 + + + + + + +
+ +637 + + + + + + +
    /**
+ +638 + + + + + + +
     * The extension input to set for the <code>appid</code> and <code>appidExclude</code>
+ +639 + + + + + + +
     * extensions.
+ +640 + + + + + + +
     *
+ +641 + + + + + + +
     * <p>You do not need this extension if you have not previously supported U2F. Its purpose is to
+ +642 + + + + + + +
     * make already-registered U2F credentials forward-compatible with the WebAuthn API. It is not
+ +643 + + + + + + +
     * needed for new registrations, even of U2F authenticators.
+ +644 + + + + + + +
     *
+ +645 + + + + + + +
     * <p>If this member is set, {@link #startAssertion(StartAssertionOptions) startAssertion} will
+ +646 + + + + + + +
     * automatically set the <code>appid</code> extension input, and {@link
+ +647 + + + + + + +
     * #finishAssertion(FinishAssertionOptions) finishAssertion} will adjust its verification logic
+ +648 + + + + + + +
     * to also accept this AppID as an alternative to the RP ID. Likewise, {@link
+ +649 + + + + + + +
     * #startRegistration(StartRegistrationOptions)} startRegistration} will automatically set the
+ +650 + + + + + + +
     * <code>appidExclude</code> extension input.
+ +651 + + + + + + +
     *
+ +652 + + + + + + +
     * <p>By default, this is not set.
+ +653 + + + + + + +
     *
+ +654 + + + + + + +
     * @see AssertionExtensionInputs#getAppid()
+ +655 + + + + + + +
     * @see RegistrationExtensionInputs#getAppidExclude()
+ +656 + + + + + + +
     * @see <a
+ +657 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +658 + + + + + + +
     *     FIDO AppID Extension (appid)</a>
+ +659 + + + + + + +
     * @see <a
+ +660 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.
+ +661 + + + + + + +
     *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +662 + + + + + + +
     */
+ +663 + + +1 + +1. appId : negated conditional → KILLED
+ +
+
+
    public RelyingPartyBuilder appId(@NonNull Optional<AppId> appId) {
+ +664 + + + + + + +
      this.appId = appId;
+ +665 + + +1 + +1. appId : replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::appId → KILLED
+ +
+
+
      return this;
+ +666 + + + + + + +
    }
+ +667 + + + + + + +
+ +668 + + + + + + +
    /**
+ +669 + + + + + + +
     * The extension input to set for the <code>appid</code> and <code>appidExclude</code>
+ +670 + + + + + + +
     * extensions.
+ +671 + + + + + + +
     *
+ +672 + + + + + + +
     * <p>You do not need this extension if you have not previously supported U2F. Its purpose is to
+ +673 + + + + + + +
     * make already-registered U2F credentials forward-compatible with the WebAuthn API. It is not
+ +674 + + + + + + +
     * needed for new registrations, even of U2F authenticators.
+ +675 + + + + + + +
     *
+ +676 + + + + + + +
     * <p>If this member is set, {@link #startAssertion(StartAssertionOptions) startAssertion} will
+ +677 + + + + + + +
     * automatically set the <code>appid</code> extension input, and {@link
+ +678 + + + + + + +
     * #finishAssertion(FinishAssertionOptions) finishAssertion} will adjust its verification logic
+ +679 + + + + + + +
     * to also accept this AppID as an alternative to the RP ID. Likewise, {@link
+ +680 + + + + + + +
     * #startRegistration(StartRegistrationOptions)} startRegistration} will automatically set the
+ +681 + + + + + + +
     * <code>appidExclude</code> extension input.
+ +682 + + + + + + +
     *
+ +683 + + + + + + +
     * <p>By default, this is not set.
+ +684 + + + + + + +
     *
+ +685 + + + + + + +
     * @see AssertionExtensionInputs#getAppid()
+ +686 + + + + + + +
     * @see RegistrationExtensionInputs#getAppidExclude()
+ +687 + + + + + + +
     * @see <a
+ +688 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +689 + + + + + + +
     *     FIDO AppID Extension (appid)</a>
+ +690 + + + + + + +
     * @see <a
+ +691 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.
+ +692 + + + + + + +
     *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +693 + + + + + + +
     */
+ +694 + + +1 + +1. appId : negated conditional → KILLED
+ +
+
+
    public RelyingPartyBuilder appId(@NonNull AppId appId) {
+ +695 + + +1 + +1. appId : replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::appId → KILLED
+ +
+
+
      return this.appId(Optional.of(appId));
+ +696 + + + + + + +
    }
+ +697 + + + + + + +
+ +698 + + + + + + +
    /**
+ +699 + + + + + + +
     * The argument for the {@link PublicKeyCredentialCreationOptions#getAttestation() attestation}
+ +700 + + + + + + +
     * parameter in registration operations.
+ +701 + + + + + + +
     *
+ +702 + + + + + + +
     * <p>Unless your application has a concrete policy for authenticator attestation, it is
+ +703 + + + + + + +
     * recommended to leave this parameter undefined.
+ +704 + + + + + + +
     *
+ +705 + + + + + + +
     * <p>If you set this, you may want to explicitly set {@link
+ +706 + + + + + + +
     * RelyingPartyBuilder#allowUntrustedAttestation(boolean) allowUntrustedAttestation} and {@link
+ +707 + + + + + + +
     * RelyingPartyBuilder#attestationTrustSource(AttestationTrustSource) attestationTrustSource}
+ +708 + + + + + + +
     * too.
+ +709 + + + + + + +
     *
+ +710 + + + + + + +
     * <p>By default, this is not set.
+ +711 + + + + + + +
     *
+ +712 + + + + + + +
     * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +713 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +714 + + + + + + +
     *     Attestation</a>
+ +715 + + + + + + +
     */
+ +716 + + + + + + +
    public RelyingPartyBuilder attestationConveyancePreference(
+ +717 + + +1 + +1. attestationConveyancePreference : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<AttestationConveyancePreference> attestationConveyancePreference) {
+ +718 + + + + + + +
      this.attestationConveyancePreference = attestationConveyancePreference;
+ +719 + + +1 + +1. attestationConveyancePreference : replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationConveyancePreference → KILLED
+ +
+
+
      return this;
+ +720 + + + + + + +
    }
+ +721 + + + + + + +
+ +722 + + + + + + +
    /**
+ +723 + + + + + + +
     * The argument for the {@link PublicKeyCredentialCreationOptions#getAttestation() attestation}
+ +724 + + + + + + +
     * parameter in registration operations.
+ +725 + + + + + + +
     *
+ +726 + + + + + + +
     * <p>Unless your application has a concrete policy for authenticator attestation, it is
+ +727 + + + + + + +
     * recommended to leave this parameter undefined.
+ +728 + + + + + + +
     *
+ +729 + + + + + + +
     * <p>If you set this, you may want to explicitly set {@link
+ +730 + + + + + + +
     * RelyingPartyBuilder#allowUntrustedAttestation(boolean) allowUntrustedAttestation} and {@link
+ +731 + + + + + + +
     * RelyingPartyBuilder#attestationTrustSource(AttestationTrustSource) attestationTrustSource}
+ +732 + + + + + + +
     * too.
+ +733 + + + + + + +
     *
+ +734 + + + + + + +
     * <p>By default, this is not set.
+ +735 + + + + + + +
     *
+ +736 + + + + + + +
     * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +737 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +738 + + + + + + +
     *     Attestation</a>
+ +739 + + + + + + +
     */
+ +740 + + + + + + +
    public RelyingPartyBuilder attestationConveyancePreference(
+ +741 + + +1 + +1. attestationConveyancePreference : negated conditional → KILLED
+ +
+
+
        @NonNull AttestationConveyancePreference attestationConveyancePreference) {
+ +742 + + +1 + +1. attestationConveyancePreference : replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationConveyancePreference → KILLED
+ +
+
+
      return this.attestationConveyancePreference(Optional.of(attestationConveyancePreference));
+ +743 + + + + + + +
    }
+ +744 + + + + + + +
+ +745 + + + + + + +
    /**
+ +746 + + + + + + +
     * An {@link AttestationTrustSource} instance to use for looking up trust roots for
+ +747 + + + + + + +
     * authenticator attestation. This matters only if {@link #getAttestationConveyancePreference()}
+ +748 + + + + + + +
     * is non-empty and not set to {@link AttestationConveyancePreference#NONE}.
+ +749 + + + + + + +
     *
+ +750 + + + + + + +
     * <p>By default, this is not set.
+ +751 + + + + + + +
     *
+ +752 + + + + + + +
     * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +753 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +754 + + + + + + +
     *     Attestation</a>
+ +755 + + + + + + +
     */
+ +756 + + + + + + +
    public RelyingPartyBuilder attestationTrustSource(
+ +757 + + +1 + +1. attestationTrustSource : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<AttestationTrustSource> attestationTrustSource) {
+ +758 + + + + + + +
      this.attestationTrustSource = attestationTrustSource;
+ +759 + + +1 + +1. attestationTrustSource : replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationTrustSource → KILLED
+ +
+
+
      return this;
+ +760 + + + + + + +
    }
+ +761 + + + + + + +
+ +762 + + + + + + +
    /**
+ +763 + + + + + + +
     * An {@link AttestationTrustSource} instance to use for looking up trust roots for
+ +764 + + + + + + +
     * authenticator attestation. This matters only if {@link #getAttestationConveyancePreference()}
+ +765 + + + + + + +
     * is non-empty and not set to {@link AttestationConveyancePreference#NONE}.
+ +766 + + + + + + +
     *
+ +767 + + + + + + +
     * <p>By default, this is not set.
+ +768 + + + + + + +
     *
+ +769 + + + + + + +
     * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +770 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +771 + + + + + + +
     *     Attestation</a>
+ +772 + + + + + + +
     */
+ +773 + + + + + + +
    public RelyingPartyBuilder attestationTrustSource(
+ +774 + + +1 + +1. attestationTrustSource : negated conditional → KILLED
+ +
+
+
        @NonNull AttestationTrustSource attestationTrustSource) {
+ +775 + + +1 + +1. attestationTrustSource : replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationTrustSource → KILLED
+ +
+
+
      return this.attestationTrustSource(Optional.of(attestationTrustSource));
+ +776 + + + + + + +
    }
+ +777 + + + + + + +
  }
+ +778 + + + + + + +
}

Mutations

366 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
negated conditional → KILLED

+
368 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
negated conditional → KILLED

+
369 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
negated conditional → KILLED

+
370 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
negated conditional → KILLED

+
371 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
negated conditional → KILLED

+
380 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
negated conditional → KILLED

+
408 + + + +

1.1
Location : generateChallenge
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
removed call to java/security/SecureRandom::nextBytes → KILLED

+
409 + + + +

1.1
Location : generateChallenge
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/RelyingParty::generateChallenge → KILLED

+
420 + + + +

1.1
Location : filterAvailableAlgorithms
Killed by : com.yubico.webauthn.RelyingPartyTest.logsWarningIfAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingParty::filterAvailableAlgorithms → KILLED

+
451 + + + +

1.1
Location : lambda$filterAvailableAlgorithms$0
Killed by : com.yubico.webauthn.RelyingPartyTest.logsWarningIfAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 → KILLED

+
459 + + + +

1.1
Location : lambda$filterAvailableAlgorithms$0
Killed by : none
replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 → NO_COVERAGE

+
468 + + + +

1.1
Location : lambda$filterAvailableAlgorithms$0
Killed by : none
replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 → NO_COVERAGE

+
471 + + + +

1.1
Location : lambda$filterAvailableAlgorithms$0
Killed by : com.yubico.webauthn.RelyingPartyTest.defaultSettingsLogWarningIfSomeAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced boolean return with false for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 → KILLED

+
497 + + + +

1.1
Location : startRegistration
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
removed call to java/util/Optional::ifPresent → KILLED

+
498 + + + +

1.1
Location : startRegistration
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/RelyingParty::startRegistration → KILLED

+
504 + + + +

1.1
Location : finishRegistration
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/RelyingParty::finishRegistration → KILLED

+
518 + + + +

1.1
Location : _finishRegistration
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/RelyingParty::_finishRegistration → KILLED

+
530 + + + +

1.1
Location : lambda$startAssertion$1
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RelyingParty::lambda$startAssertion$1 → KILLED

+
535 + + + +

1.1
Location : lambda$startAssertion$2
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingParty::lambda$startAssertion$2 → KILLED

+
542 + + + +

1.1
Location : startAssertion
Killed by : com.yubico.webauthn.RelyingPartyAssertionSpec
removed call to java/util/Optional::ifPresent → KILLED

+
544 + + + +

1.1
Location : startAssertion
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty::startAssertion → KILLED

+
562 + + + +

1.1
Location : finishAssertion
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty::finishAssertion → KILLED

+
576 + + + +

1.1
Location : _finishAssertion
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty::_finishAssertion → KILLED

+
580 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/RelyingParty::builder → KILLED

+
600 + + + +

1.1
Location : identity
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages::identity → KILLED

+
612 + + + +

1.1
Location : credentialRepository
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2::credentialRepository → KILLED

+
632 + + + +

1.1
Location : credentialRepositoryV2
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2::credentialRepositoryV2 → KILLED

+
663 + + + +

1.1
Location : appId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
665 + + + +

1.1
Location : appId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::appId → KILLED

+
694 + + + +

1.1
Location : appId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
695 + + + +

1.1
Location : appId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::appId → KILLED

+
717 + + + +

1.1
Location : attestationConveyancePreference
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
719 + + + +

1.1
Location : attestationConveyancePreference
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationConveyancePreference → KILLED

+
741 + + + +

1.1
Location : attestationConveyancePreference
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
742 + + + +

1.1
Location : attestationConveyancePreference
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationConveyancePreference → KILLED

+
757 + + + +

1.1
Location : attestationTrustSource
Killed by : com.yubico.webauthn.RelyingPartyRegistrationSpec
negated conditional → KILLED

+
759 + + + +

1.1
Location : attestationTrustSource
Killed by : com.yubico.webauthn.RelyingPartyRegistrationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationTrustSource → KILLED

+
774 + + + +

1.1
Location : attestationTrustSource
Killed by : com.yubico.webauthn.RelyingPartyRegistrationSpec
negated conditional → KILLED

+
775 + + + +

1.1
Location : attestationTrustSource
Killed by : com.yubico.webauthn.RelyingPartyRegistrationSpec
replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationTrustSource → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RelyingPartyV2.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RelyingPartyV2.java.html new file mode 100644 index 000000000..a6f938bcd --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/RelyingPartyV2.java.html @@ -0,0 +1,11033 @@ + + + + + + + + + +

RelyingPartyV2.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.internal.util.CollectionUtil;
+ +28 + + + + + + +
import com.yubico.internal.util.OptionalUtil;
+ +29 + + + + + + +
import com.yubico.webauthn.attestation.AttestationTrustSource;
+ +30 + + + + + + +
import com.yubico.webauthn.data.AssertionExtensionInputs;
+ +31 + + + + + + +
import com.yubico.webauthn.data.AttestationConveyancePreference;
+ +32 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorData;
+ +33 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +34 + + + + + + +
import com.yubico.webauthn.data.CollectedClientData;
+ +35 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions;
+ +36 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions.PublicKeyCredentialCreationOptionsBuilder;
+ +37 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialParameters;
+ +38 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialRequestOptions;
+ +39 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialRequestOptions.PublicKeyCredentialRequestOptionsBuilder;
+ +40 + + + + + + +
import com.yubico.webauthn.data.RegistrationExtensionInputs;
+ +41 + + + + + + +
import com.yubico.webauthn.data.RelyingPartyIdentity;
+ +42 + + + + + + +
import com.yubico.webauthn.exception.AssertionFailedException;
+ +43 + + + + + + +
import com.yubico.webauthn.exception.InvalidSignatureCountException;
+ +44 + + + + + + +
import com.yubico.webauthn.exception.RegistrationFailedException;
+ +45 + + + + + + +
import com.yubico.webauthn.extension.appid.AppId;
+ +46 + + + + + + +
import java.net.MalformedURLException;
+ +47 + + + + + + +
import java.net.URL;
+ +48 + + + + + + +
import java.security.KeyFactory;
+ +49 + + + + + + +
import java.security.SecureRandom;
+ +50 + + + + + + +
import java.security.Signature;
+ +51 + + + + + + +
import java.time.Clock;
+ +52 + + + + + + +
import java.util.Arrays;
+ +53 + + + + + + +
import java.util.Collections;
+ +54 + + + + + + +
import java.util.List;
+ +55 + + + + + + +
import java.util.Optional;
+ +56 + + + + + + +
import java.util.Set;
+ +57 + + + + + + +
import java.util.stream.Collectors;
+ +58 + + + + + + +
import lombok.Builder;
+ +59 + + + + + + +
import lombok.NonNull;
+ +60 + + + + + + +
import lombok.Value;
+ +61 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +62 + + + + + + +
+ +63 + + + + + + +
/**
+ +64 + + + + + + +
 * Encapsulates the four basic Web Authentication operations - start/finish registration,
+ +65 + + + + + + +
 * start/finish authentication - along with overall operational settings for them.
+ +66 + + + + + + +
 *
+ +67 + + + + + + +
 * <p>This class has no mutable state. An instance of this class may therefore be thought of as a
+ +68 + + + + + + +
 * container for specialized versions (function closures) of these four operations rather than a
+ +69 + + + + + + +
 * stateful object.
+ +70 + + + + + + +
 */
+ +71 + + + + + + +
@Slf4j
+ +72 + + + + + + +
@Builder(toBuilder = true)
+ +73 + + + + + + +
@Value
+ +74 + + + + + + +
public class RelyingPartyV2<C extends CredentialRecord> {
+ +75 + + + + + + +
+ +76 + + + + + + +
  private static final SecureRandom random = new SecureRandom();
+ +77 + + + + + + +
+ +78 + + + + + + +
  /**
+ +79 + + + + + + +
   * The {@link RelyingPartyIdentity} that will be set as the {@link
+ +80 + + + + + + +
   * PublicKeyCredentialCreationOptions#getRp() rp} parameter when initiating registration
+ +81 + + + + + + +
   * operations, and which {@link AuthenticatorData#getRpIdHash()} will be compared against. This is
+ +82 + + + + + + +
   * a required parameter.
+ +83 + + + + + + +
   *
+ +84 + + + + + + +
   * <p>A successful registration or authentication operation requires {@link
+ +85 + + + + + + +
   * AuthenticatorData#getRpIdHash()} to exactly equal the SHA-256 hash of this member's {@link
+ +86 + + + + + + +
   * RelyingPartyIdentity#getId() id} member. Alternatively, it may instead equal the SHA-256 hash
+ +87 + + + + + + +
   * of {@link #getAppId() appId} if the latter is present.
+ +88 + + + + + + +
   *
+ +89 + + + + + + +
   * @see #startRegistration(StartRegistrationOptions)
+ +90 + + + + + + +
   * @see PublicKeyCredentialCreationOptions
+ +91 + + + + + + +
   */
+ +92 + + + + + + +
  @NonNull private final RelyingPartyIdentity identity;
+ +93 + + + + + + +
+ +94 + + + + + + +
  /**
+ +95 + + + + + + +
   * The allowed origins that returned authenticator responses will be compared against.
+ +96 + + + + + + +
   *
+ +97 + + + + + + +
   * <p>The default is the set containing only the string <code>
+ +98 + + + + + + +
   * "https://" + {@link #getIdentity()}.getId()</code>.
+ +99 + + + + + + +
   *
+ +100 + + + + + + +
   * <p>If {@link RelyingPartyV2Builder#allowOriginPort(boolean) allowOriginPort} and {@link
+ +101 + + + + + + +
   * RelyingPartyV2Builder#allowOriginSubdomain(boolean) allowOriginSubdomain} are both <code>false
+ +102 + + + + + + +
   * </code> (the default), then a successful registration or authentication operation requires
+ +103 + + + + + + +
   * {@link CollectedClientData#getOrigin()} to exactly equal one of these values.
+ +104 + + + + + + +
   *
+ +105 + + + + + + +
   * <p>If {@link RelyingPartyV2Builder#allowOriginPort(boolean) allowOriginPort} is <code>true
+ +106 + + + + + + +
   * </code> , then the above rule is relaxed to allow any port number in {@link
+ +107 + + + + + + +
   * CollectedClientData#getOrigin()}, regardless of any port specified.
+ +108 + + + + + + +
   *
+ +109 + + + + + + +
   * <p>If {@link RelyingPartyV2Builder#allowOriginSubdomain(boolean) allowOriginSubdomain} is
+ +110 + + + + + + +
   * <code>
+ +111 + + + + + + +
   * true</code>, then the above rule is relaxed to allow any subdomain, of any depth, of any of
+ +112 + + + + + + +
   * these values.
+ +113 + + + + + + +
   *
+ +114 + + + + + + +
   * <p>For either of the above relaxations to take effect, both the allowed origin and the client
+ +115 + + + + + + +
   * data origin must be valid URLs. Origins that are not valid URLs are matched only by exact
+ +116 + + + + + + +
   * string equality.
+ +117 + + + + + + +
   *
+ +118 + + + + + + +
   * @see #getIdentity()
+ +119 + + + + + + +
   */
+ +120 + + + + + + +
  @NonNull private final Set<String> origins;
+ +121 + + + + + + +
+ +122 + + + + + + +
  /**
+ +123 + + + + + + +
   * An abstract database which can look up credentials, usernames and user handles from usernames,
+ +124 + + + + + + +
   * user handles and credential IDs. This is a required parameter.
+ +125 + + + + + + +
   *
+ +126 + + + + + + +
   * <p>This is used to look up:
+ +127 + + + + + + +
   *
+ +128 + + + + + + +
   * <ul>
+ +129 + + + + + + +
   *   <li>the user handle for a user logging in via user name
+ +130 + + + + + + +
   *   <li>the user name for a user logging in via user handle
+ +131 + + + + + + +
   *   <li>the credential IDs to include in {@link
+ +132 + + + + + + +
   *       PublicKeyCredentialCreationOptions#getExcludeCredentials()}
+ +133 + + + + + + +
   *   <li>the credential IDs to include in {@link
+ +134 + + + + + + +
   *       PublicKeyCredentialRequestOptions#getAllowCredentials()}
+ +135 + + + + + + +
   *   <li>that the correct user owns the credential when verifying an assertion
+ +136 + + + + + + +
   *   <li>the public key to use to verify an assertion
+ +137 + + + + + + +
   *   <li>the stored signature counter when verifying an assertion
+ +138 + + + + + + +
   * </ul>
+ +139 + + + + + + +
   */
+ +140 + + + + + + +
  @NonNull private final CredentialRepositoryV2<C> credentialRepository;
+ +141 + + + + + + +
+ +142 + + + + + + +
  /**
+ +143 + + + + + + +
   * Enable support for identifying users by username.
+ +144 + + + + + + +
   *
+ +145 + + + + + + +
   * <p>If set, then {@link #startAssertion(StartAssertionOptions)} allows setting the {@link
+ +146 + + + + + + +
   * StartAssertionOptions.StartAssertionOptionsBuilder#username(String) username} parameter when
+ +147 + + + + + + +
   * starting an assertion.
+ +148 + + + + + + +
   *
+ +149 + + + + + + +
   * <p>By default, this is not set.
+ +150 + + + + + + +
   *
+ +151 + + + + + + +
   * @deprecated EXPERIMENTAL: This is an experimental feature. It is likely to change or be deleted
+ +152 + + + + + + +
   *     before reaching a mature release.
+ +153 + + + + + + +
   */
+ +154 + + + + + + +
  @Deprecated private final UsernameRepository usernameRepository;
+ +155 + + + + + + +
+ +156 + + + + + + +
  /**
+ +157 + + + + + + +
   * The extension input to set for the <code>appid</code> and <code>appidExclude</code> extensions.
+ +158 + + + + + + +
   *
+ +159 + + + + + + +
   * <p>You do not need this extension if you have not previously supported U2F. Its purpose is to
+ +160 + + + + + + +
   * make already-registered U2F credentials forward-compatible with the WebAuthn API. It is not
+ +161 + + + + + + +
   * needed for new registrations, even of U2F authenticators.
+ +162 + + + + + + +
   *
+ +163 + + + + + + +
   * <p>If this member is set, {@link #startAssertion(StartAssertionOptions) startAssertion} will
+ +164 + + + + + + +
   * automatically set the <code>appid</code> extension input, and {@link
+ +165 + + + + + + +
   * #finishAssertion(FinishAssertionOptions) finishAssertion} will adjust its verification logic to
+ +166 + + + + + + +
   * also accept this AppID as an alternative to the RP ID. Likewise, {@link
+ +167 + + + + + + +
   * #startRegistration(StartRegistrationOptions)} startRegistration} will automatically set the
+ +168 + + + + + + +
   * <code>appidExclude</code> extension input.
+ +169 + + + + + + +
   *
+ +170 + + + + + + +
   * <p>By default, this is not set.
+ +171 + + + + + + +
   *
+ +172 + + + + + + +
   * @see AssertionExtensionInputs#getAppid()
+ +173 + + + + + + +
   * @see RegistrationExtensionInputs#getAppidExclude()
+ +174 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +175 + + + + + + +
   *     FIDO AppID Extension (appid)</a>
+ +176 + + + + + + +
   * @see <a
+ +177 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.
+ +178 + + + + + + +
   *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +179 + + + + + + +
   */
+ +180 + + + + + + +
  @NonNull private final Optional<AppId> appId;
+ +181 + + + + + + +
+ +182 + + + + + + +
  /**
+ +183 + + + + + + +
   * The argument for the {@link PublicKeyCredentialCreationOptions#getAttestation() attestation}
+ +184 + + + + + + +
   * parameter in registration operations.
+ +185 + + + + + + +
   *
+ +186 + + + + + + +
   * <p>Unless your application has a concrete policy for authenticator attestation, it is
+ +187 + + + + + + +
   * recommended to leave this parameter undefined.
+ +188 + + + + + + +
   *
+ +189 + + + + + + +
   * <p>If you set this, you may want to explicitly set {@link
+ +190 + + + + + + +
   * RelyingPartyV2Builder#allowUntrustedAttestation(boolean) allowUntrustedAttestation} and {@link
+ +191 + + + + + + +
   * RelyingPartyV2Builder#attestationTrustSource(AttestationTrustSource) attestationTrustSource}
+ +192 + + + + + + +
   * too.
+ +193 + + + + + + +
   *
+ +194 + + + + + + +
   * <p>By default, this is not set.
+ +195 + + + + + + +
   *
+ +196 + + + + + + +
   * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +197 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +198 + + + + + + +
   *     Attestation</a>
+ +199 + + + + + + +
   */
+ +200 + + + + + + +
  @NonNull private final Optional<AttestationConveyancePreference> attestationConveyancePreference;
+ +201 + + + + + + +
+ +202 + + + + + + +
  /**
+ +203 + + + + + + +
   * An {@link AttestationTrustSource} instance to use for looking up trust roots for authenticator
+ +204 + + + + + + +
   * attestation. This matters only if {@link #getAttestationConveyancePreference()} is non-empty
+ +205 + + + + + + +
   * and not set to {@link AttestationConveyancePreference#NONE}.
+ +206 + + + + + + +
   *
+ +207 + + + + + + +
   * <p>By default, this is not set.
+ +208 + + + + + + +
   *
+ +209 + + + + + + +
   * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +210 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +211 + + + + + + +
   *     Attestation</a>
+ +212 + + + + + + +
   */
+ +213 + + + + + + +
  @NonNull private final Optional<AttestationTrustSource> attestationTrustSource;
+ +214 + + + + + + +
+ +215 + + + + + + +
  /**
+ +216 + + + + + + +
   * The argument for the {@link PublicKeyCredentialCreationOptions#getPubKeyCredParams()
+ +217 + + + + + + +
   * pubKeyCredParams} parameter in registration operations.
+ +218 + + + + + + +
   *
+ +219 + + + + + + +
   * <p>This is a list of acceptable public key algorithms and their parameters, ordered from most
+ +220 + + + + + + +
   * to least preferred.
+ +221 + + + + + + +
   *
+ +222 + + + + + + +
   * <p>The default is the following list, in order:
+ +223 + + + + + + +
   *
+ +224 + + + + + + +
   * <ol>
+ +225 + + + + + + +
   *   <li>{@link PublicKeyCredentialParameters#ES256 ES256}
+ +226 + + + + + + +
   *   <li>{@link PublicKeyCredentialParameters#EdDSA EdDSA}
+ +227 + + + + + + +
   *   <li>{@link PublicKeyCredentialParameters#ES256 ES384}
+ +228 + + + + + + +
   *   <li>{@link PublicKeyCredentialParameters#ES256 ES512}
+ +229 + + + + + + +
   *   <li>{@link PublicKeyCredentialParameters#RS256 RS256}
+ +230 + + + + + + +
   *   <li>{@link PublicKeyCredentialParameters#RS384 RS384}
+ +231 + + + + + + +
   *   <li>{@link PublicKeyCredentialParameters#RS512 RS512}
+ +232 + + + + + + +
   * </ol>
+ +233 + + + + + + +
   *
+ +234 + + + + + + +
   * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +235 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +236 + + + + + + +
   *     Attestation</a>
+ +237 + + + + + + +
   */
+ +238 + + + + + + +
  @Builder.Default @NonNull
+ +239 + + + + + + +
  private final List<PublicKeyCredentialParameters> preferredPubkeyParams =
+ +240 + + + + + + +
      Collections.unmodifiableList(
+ +241 + + + + + + +
          Arrays.asList(
+ +242 + + + + + + +
              PublicKeyCredentialParameters.ES256,
+ +243 + + + + + + +
              PublicKeyCredentialParameters.EdDSA,
+ +244 + + + + + + +
              PublicKeyCredentialParameters.ES384,
+ +245 + + + + + + +
              PublicKeyCredentialParameters.ES512,
+ +246 + + + + + + +
              PublicKeyCredentialParameters.RS256,
+ +247 + + + + + + +
              PublicKeyCredentialParameters.RS384,
+ +248 + + + + + + +
              PublicKeyCredentialParameters.RS512));
+ +249 + + + + + + +
+ +250 + + + + + + +
  /**
+ +251 + + + + + + +
   * If <code>true</code>, the origin matching rule is relaxed to allow any port number.
+ +252 + + + + + + +
   *
+ +253 + + + + + + +
   * <p>The default is <code>false</code>.
+ +254 + + + + + + +
   *
+ +255 + + + + + + +
   * <p>Examples with <code>
+ +256 + + + + + + +
   * origins: ["https://example.org", "https://accounts.example.org", "https://acme.com:8443"]
+ +257 + + + + + + +
   * </code>
+ +258 + + + + + + +
   *
+ +259 + + + + + + +
   * <ul>
+ +260 + + + + + + +
   *   <li>
+ +261 + + + + + + +
   *       <p><code>allowOriginPort: false</code>
+ +262 + + + + + + +
   *       <p>Accepted:
+ +263 + + + + + + +
   *       <ul>
+ +264 + + + + + + +
   *         <li><code>https://example.org</code>
+ +265 + + + + + + +
   *         <li><code>https://accounts.example.org</code>
+ +266 + + + + + + +
   *         <li><code>https://acme.com:8443</code>
+ +267 + + + + + + +
   *       </ul>
+ +268 + + + + + + +
   *       <p>Rejected:
+ +269 + + + + + + +
   *       <ul>
+ +270 + + + + + + +
   *         <li><code>https://example.org:8443</code>
+ +271 + + + + + + +
   *         <li><code>https://shop.example.org</code>
+ +272 + + + + + + +
   *         <li><code>https://acme.com</code>
+ +273 + + + + + + +
   *         <li><code>https://acme.com:9000</code>
+ +274 + + + + + + +
   *       </ul>
+ +275 + + + + + + +
   *   <li>
+ +276 + + + + + + +
   *       <p><code>allowOriginPort: true</code>
+ +277 + + + + + + +
   *       <p>Accepted:
+ +278 + + + + + + +
   *       <ul>
+ +279 + + + + + + +
   *         <li><code>https://example.org</code>
+ +280 + + + + + + +
   *         <li><code>https://example.org:8443</code>
+ +281 + + + + + + +
   *         <li><code>https://accounts.example.org</code>
+ +282 + + + + + + +
   *         <li><code>https://acme.com</code>
+ +283 + + + + + + +
   *         <li><code>https://acme.com:8443</code>
+ +284 + + + + + + +
   *         <li><code>https://acme.com:9000</code>
+ +285 + + + + + + +
   *       </ul>
+ +286 + + + + + + +
   *       <p>Rejected:
+ +287 + + + + + + +
   *       <ul>
+ +288 + + + + + + +
   *         <li><code>https://shop.example.org</code>
+ +289 + + + + + + +
   *       </ul>
+ +290 + + + + + + +
   * </ul>
+ +291 + + + + + + +
   */
+ +292 + + + + + + +
  @Builder.Default private final boolean allowOriginPort = false;
+ +293 + + + + + + +
+ +294 + + + + + + +
  /**
+ +295 + + + + + + +
   * If <code>true</code>, the origin matching rule is relaxed to allow any subdomain, of any depth,
+ +296 + + + + + + +
   * of the values of {@link RelyingPartyV2Builder#origins(Set) origins}.
+ +297 + + + + + + +
   *
+ +298 + + + + + + +
   * <p>The default is <code>false</code>.
+ +299 + + + + + + +
   *
+ +300 + + + + + + +
   * <p>Examples with <code>origins: ["https://example.org", "https://acme.com:8443"]</code>
+ +301 + + + + + + +
   *
+ +302 + + + + + + +
   * <ul>
+ +303 + + + + + + +
   *   <li>
+ +304 + + + + + + +
   *       <p><code>allowOriginSubdomain: false</code>
+ +305 + + + + + + +
   *       <p>Accepted:
+ +306 + + + + + + +
   *       <ul>
+ +307 + + + + + + +
   *         <li><code>https://example.org</code>
+ +308 + + + + + + +
   *         <li><code>https://acme.com:8443</code>
+ +309 + + + + + + +
   *       </ul>
+ +310 + + + + + + +
   *       <p>Rejected:
+ +311 + + + + + + +
   *       <ul>
+ +312 + + + + + + +
   *         <li><code>https://example.org:8443</code>
+ +313 + + + + + + +
   *         <li><code>https://accounts.example.org</code>
+ +314 + + + + + + +
   *         <li><code>https://acme.com</code>
+ +315 + + + + + + +
   *         <li><code>https://eu.shop.acme.com:8443</code>
+ +316 + + + + + + +
   *       </ul>
+ +317 + + + + + + +
   *   <li>
+ +318 + + + + + + +
   *       <p><code>allowOriginSubdomain: true</code>
+ +319 + + + + + + +
   *       <p>Accepted:
+ +320 + + + + + + +
   *       <ul>
+ +321 + + + + + + +
   *         <li><code>https://example.org</code>
+ +322 + + + + + + +
   *         <li><code>https://accounts.example.org</code>
+ +323 + + + + + + +
   *         <li><code>https://acme.com:8443</code>
+ +324 + + + + + + +
   *         <li><code>https://eu.shop.acme.com:8443</code>
+ +325 + + + + + + +
   *       </ul>
+ +326 + + + + + + +
   *       <p>Rejected:
+ +327 + + + + + + +
   *       <ul>
+ +328 + + + + + + +
   *         <li><code>https://example.org:8443</code>
+ +329 + + + + + + +
   *         <li><code>https://acme.com</code>
+ +330 + + + + + + +
   *       </ul>
+ +331 + + + + + + +
   * </ul>
+ +332 + + + + + + +
   */
+ +333 + + + + + + +
  @Builder.Default private final boolean allowOriginSubdomain = false;
+ +334 + + + + + + +
+ +335 + + + + + + +
  /**
+ +336 + + + + + + +
   * If <code>false</code>, {@link #finishRegistration(FinishRegistrationOptions)
+ +337 + + + + + + +
   * finishRegistration} will only allow registrations where the attestation signature can be linked
+ +338 + + + + + + +
   * to a trusted attestation root. This excludes none attestation, and self attestation unless the
+ +339 + + + + + + +
   * self attestation key is explicitly trusted.
+ +340 + + + + + + +
   *
+ +341 + + + + + + +
   * <p>Regardless of the value of this option, invalid attestation statements of supported formats
+ +342 + + + + + + +
   * will always be rejected. For example, a "packed" attestation statement with an invalid
+ +343 + + + + + + +
   * signature will be rejected even if this option is set to <code>true</code>.
+ +344 + + + + + + +
   *
+ +345 + + + + + + +
   * <p>The default is <code>true</code>.
+ +346 + + + + + + +
   */
+ +347 + + + + + + +
  @Builder.Default private final boolean allowUntrustedAttestation = true;
+ +348 + + + + + + +
+ +349 + + + + + + +
  /**
+ +350 + + + + + + +
   * If <code>true</code>, {@link #finishAssertion(FinishAssertionOptions) finishAssertion} will
+ +351 + + + + + + +
   * succeed only if the {@link AuthenticatorData#getSignatureCounter() signature counter value} in
+ +352 + + + + + + +
   * the response is strictly greater than the {@link RegisteredCredential#getSignatureCount()
+ +353 + + + + + + +
   * stored signature counter value}, or if both counters are exactly zero.
+ +354 + + + + + + +
   *
+ +355 + + + + + + +
   * <p>The default is <code>true</code>.
+ +356 + + + + + + +
   */
+ +357 + + + + + + +
  @Builder.Default private final boolean validateSignatureCounter = true;
+ +358 + + + + + + +
+ +359 + + + + + + +
  /**
+ +360 + + + + + + +
   * A {@link Clock} which will be used to tell the current time while verifying attestation
+ +361 + + + + + + +
   * certificate chains.
+ +362 + + + + + + +
   *
+ +363 + + + + + + +
   * <p>This is intended primarily for testing, and relevant only if {@link
+ +364 + + + + + + +
   * RelyingPartyV2Builder#attestationTrustSource(AttestationTrustSource)} is set.
+ +365 + + + + + + +
   *
+ +366 + + + + + + +
   * <p>The default is <code>Clock.systemUTC()</code>.
+ +367 + + + + + + +
   */
+ +368 + + + + + + +
  @Builder.Default @NonNull private final Clock clock = Clock.systemUTC();
+ +369 + + + + + + +
+ +370 + + + + + + +
  @Builder
+ +371 + + + + + + +
  private RelyingPartyV2(
+ +372 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull RelyingPartyIdentity identity,
+ +373 + + + + + + +
      Set<String> origins,
+ +374 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull CredentialRepositoryV2<C> credentialRepository,
+ +375 + + + + + + +
      UsernameRepository usernameRepository,
+ +376 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Optional<AppId> appId,
+ +377 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Optional<AttestationConveyancePreference> attestationConveyancePreference,
+ +378 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
      @NonNull Optional<AttestationTrustSource> attestationTrustSource,
+ +379 + + + + + + +
      List<PublicKeyCredentialParameters> preferredPubkeyParams,
+ +380 + + + + + + +
      boolean allowOriginPort,
+ +381 + + + + + + +
      boolean allowOriginSubdomain,
+ +382 + + + + + + +
      boolean allowUntrustedAttestation,
+ +383 + + + + + + +
      boolean validateSignatureCounter,
+ +384 + + + + + + +
      Clock clock) {
+ +385 + + + + + + +
    this.identity = identity;
+ +386 + + + + + + +
    this.origins =
+ +387 + + +1 + +1. <init> : negated conditional → KILLED
+ +
+
+
        origins != null
+ +388 + + + + + + +
            ? CollectionUtil.immutableSet(origins)
+ +389 + + + + + + +
            : Collections.singleton("https://" + identity.getId());
+ +390 + + + + + + +
+ +391 + + + + + + +
    for (String origin : this.origins) {
+ +392 + + + + + + +
      try {
+ +393 + + + + + + +
        new URL(origin);
+ +394 + + + + + + +
      } catch (MalformedURLException e) {
+ +395 + + + + + + +
        log.warn(
+ +396 + + + + + + +
            "Allowed origin is not a valid URL, it will match only by exact string equality: {}",
+ +397 + + + + + + +
            origin);
+ +398 + + + + + + +
      }
+ +399 + + + + + + +
    }
+ +400 + + + + + + +
+ +401 + + + + + + +
    this.credentialRepository = credentialRepository;
+ +402 + + + + + + +
    this.usernameRepository = usernameRepository;
+ +403 + + + + + + +
    this.appId = appId;
+ +404 + + + + + + +
    this.attestationConveyancePreference = attestationConveyancePreference;
+ +405 + + + + + + +
    this.attestationTrustSource = attestationTrustSource;
+ +406 + + + + + + +
    this.preferredPubkeyParams = filterAvailableAlgorithms(preferredPubkeyParams);
+ +407 + + + + + + +
    this.allowOriginPort = allowOriginPort;
+ +408 + + + + + + +
    this.allowOriginSubdomain = allowOriginSubdomain;
+ +409 + + + + + + +
    this.allowUntrustedAttestation = allowUntrustedAttestation;
+ +410 + + + + + + +
    this.validateSignatureCounter = validateSignatureCounter;
+ +411 + + + + + + +
    this.clock = clock;
+ +412 + + + + + + +
  }
+ +413 + + + + + + +
+ +414 + + + + + + +
  private static ByteArray generateChallenge() {
+ +415 + + + + + + +
    byte[] bytes = new byte[32];
+ +416 + + +1 + +1. generateChallenge : removed call to java/security/SecureRandom::nextBytes → KILLED
+ +
+
+
    random.nextBytes(bytes);
+ +417 + + +1 + +1. generateChallenge : replaced return value with null for com/yubico/webauthn/RelyingPartyV2::generateChallenge → KILLED
+ +
+
+
    return new ByteArray(bytes);
+ +418 + + + + + + +
  }
+ +419 + + + + + + +
+ +420 + + + + + + +
  /**
+ +421 + + + + + + +
   * Filter <code>pubKeyCredParams</code> to only contain algorithms with a {@link KeyFactory} and a
+ +422 + + + + + + +
   * {@link Signature} available, and log a warning for every unsupported algorithm.
+ +423 + + + + + + +
   *
+ +424 + + + + + + +
   * @return a new {@link List} containing only the algorithms supported in the current JCA context.
+ +425 + + + + + + +
   */
+ +426 + + + + + + +
  private static List<PublicKeyCredentialParameters> filterAvailableAlgorithms(
+ +427 + + + + + + +
      List<PublicKeyCredentialParameters> pubKeyCredParams) {
+ +428 + + +1 + +1. filterAvailableAlgorithms : replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingPartyV2::filterAvailableAlgorithms → KILLED
+ +
+
+
    return RelyingParty.filterAvailableAlgorithms(pubKeyCredParams);
+ +429 + + + + + + +
  }
+ +430 + + + + + + +
+ +431 + + + + + + +
  public PublicKeyCredentialCreationOptions startRegistration(
+ +432 + + + + + + +
      StartRegistrationOptions startRegistrationOptions) {
+ +433 + + + + + + +
    PublicKeyCredentialCreationOptionsBuilder builder =
+ +434 + + + + + + +
        PublicKeyCredentialCreationOptions.builder()
+ +435 + + + + + + +
            .rp(identity)
+ +436 + + + + + + +
            .user(startRegistrationOptions.getUser())
+ +437 + + + + + + +
            .challenge(generateChallenge())
+ +438 + + + + + + +
            .pubKeyCredParams(preferredPubkeyParams)
+ +439 + + + + + + +
            .excludeCredentials(
+ +440 + + + + + + +
                credentialRepository
+ +441 + + + + + + +
                    .getCredentialDescriptorsForUserHandle(
+ +442 + + + + + + +
                        startRegistrationOptions.getUser().getId())
+ +443 + + + + + + +
                    .stream()
+ +444 + + + + + + +
                    .map(ToPublicKeyCredentialDescriptor::toPublicKeyCredentialDescriptor)
+ +445 + + + + + + +
                    .collect(Collectors.toSet()))
+ +446 + + + + + + +
            .authenticatorSelection(startRegistrationOptions.getAuthenticatorSelection())
+ +447 + + + + + + +
            .extensions(
+ +448 + + + + + + +
                startRegistrationOptions
+ +449 + + + + + + +
                    .getExtensions()
+ +450 + + + + + + +
                    .merge(
+ +451 + + + + + + +
                        RegistrationExtensionInputs.builder()
+ +452 + + + + + + +
                            .appidExclude(appId)
+ +453 + + + + + + +
                            .credProps()
+ +454 + + + + + + +
                            .build()))
+ +455 + + + + + + +
            .timeout(startRegistrationOptions.getTimeout());
+ +456 + + +1 + +1. startRegistration : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
    attestationConveyancePreference.ifPresent(builder::attestation);
+ +457 + + +1 + +1. startRegistration : replaced return value with null for com/yubico/webauthn/RelyingPartyV2::startRegistration → KILLED
+ +
+
+
    return builder.build();
+ +458 + + + + + + +
  }
+ +459 + + + + + + +
+ +460 + + + + + + +
  public RegistrationResult finishRegistration(FinishRegistrationOptions finishRegistrationOptions)
+ +461 + + + + + + +
      throws RegistrationFailedException {
+ +462 + + + + + + +
    try {
+ +463 + + +1 + +1. finishRegistration : replaced return value with null for com/yubico/webauthn/RelyingPartyV2::finishRegistration → KILLED
+ +
+
+
      return _finishRegistration(finishRegistrationOptions).run();
+ +464 + + + + + + +
    } catch (IllegalArgumentException e) {
+ +465 + + + + + + +
      throw new RegistrationFailedException(e);
+ +466 + + + + + + +
    }
+ +467 + + + + + + +
  }
+ +468 + + + + + + +
+ +469 + + + + + + +
  /**
+ +470 + + + + + + +
   * This method is NOT part of the public API.
+ +471 + + + + + + +
   *
+ +472 + + + + + + +
   * <p>This method is called internally by {@link #finishRegistration(FinishRegistrationOptions)}.
+ +473 + + + + + + +
   * It is a separate method to facilitate testing; users should call {@link
+ +474 + + + + + + +
   * #finishRegistration(FinishRegistrationOptions)} instead of this method.
+ +475 + + + + + + +
   */
+ +476 + + + + + + +
  FinishRegistrationSteps _finishRegistration(FinishRegistrationOptions options) {
+ +477 + + +1 + +1. _finishRegistration : replaced return value with null for com/yubico/webauthn/RelyingPartyV2::_finishRegistration → KILLED
+ +
+
+
    return new FinishRegistrationSteps(this, options);
+ +478 + + + + + + +
  }
+ +479 + + + + + + +
+ +480 + + + + + + +
  public AssertionRequest startAssertion(StartAssertionOptions startAssertionOptions) {
+ +481 + + +2 + +1. startAssertion : negated conditional → KILLED
+2. startAssertion : negated conditional → KILLED
+ +
+
+
    if (startAssertionOptions.getUsername().isPresent() && usernameRepository == null) {
+ +482 + + + + + + +
      throw new IllegalArgumentException(
+ +483 + + + + + + +
          "StartAssertionOptions.username must not be set when usernameRepository is not configured.");
+ +484 + + + + + + +
    }
+ +485 + + + + + + +
+ +486 + + + + + + +
    PublicKeyCredentialRequestOptionsBuilder pkcro =
+ +487 + + + + + + +
        PublicKeyCredentialRequestOptions.builder()
+ +488 + + + + + + +
            .challenge(generateChallenge())
+ +489 + + + + + + +
            .rpId(identity.getId())
+ +490 + + + + + + +
            .allowCredentials(
+ +491 + + + + + + +
                OptionalUtil.orElseOptional(
+ +492 + + + + + + +
                        startAssertionOptions.getUserHandle(),
+ +493 + + + + + + +
                        () ->
+ +494 + + +1 + +1. lambda$startAssertion$1 : replaced return value with Optional.empty for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$1 → KILLED
+ +
+
+
                            Optional.ofNullable(usernameRepository)
+ +495 + + + + + + +
                                .flatMap(
+ +496 + + + + + + +
                                    unr ->
+ +497 + + +1 + +1. lambda$startAssertion$0 : replaced return value with Optional.empty for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$0 → KILLED
+ +
+
+
                                        startAssertionOptions
+ +498 + + + + + + +
                                            .getUsername()
+ +499 + + + + + + +
                                            .flatMap(unr::getUserHandleForUsername)))
+ +500 + + + + + + +
                    .map(credentialRepository::getCredentialDescriptorsForUserHandle)
+ +501 + + + + + + +
                    .map(
+ +502 + + + + + + +
                        descriptors ->
+ +503 + + + + + + +
                            descriptors.stream()
+ +504 + + + + + + +
                                .map(
+ +505 + + + + + + +
                                    ToPublicKeyCredentialDescriptor
+ +506 + + + + + + +
                                        ::toPublicKeyCredentialDescriptor)
+ +507 + + +1 + +1. lambda$startAssertion$2 : replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$2 → KILLED
+ +
+
+
                                .collect(Collectors.toList())))
+ +508 + + + + + + +
            .extensions(
+ +509 + + + + + + +
                startAssertionOptions
+ +510 + + + + + + +
                    .getExtensions()
+ +511 + + + + + + +
                    .merge(startAssertionOptions.getExtensions().toBuilder().appid(appId).build()))
+ +512 + + + + + + +
            .timeout(startAssertionOptions.getTimeout());
+ +513 + + + + + + +
+ +514 + + +1 + +1. startAssertion : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
    startAssertionOptions.getUserVerification().ifPresent(pkcro::userVerification);
+ +515 + + + + + + +
+ +516 + + +1 + +1. startAssertion : replaced return value with null for com/yubico/webauthn/RelyingPartyV2::startAssertion → KILLED
+ +
+
+
    return AssertionRequest.builder()
+ +517 + + + + + + +
        .publicKeyCredentialRequestOptions(pkcro.build())
+ +518 + + + + + + +
        .username(startAssertionOptions.getUsername())
+ +519 + + + + + + +
        .userHandle(startAssertionOptions.getUserHandle())
+ +520 + + + + + + +
        .build();
+ +521 + + + + + + +
  }
+ +522 + + + + + + +
+ +523 + + + + + + +
  /**
+ +524 + + + + + + +
   * @throws InvalidSignatureCountException if {@link
+ +525 + + + + + + +
   *     RelyingPartyV2Builder#validateSignatureCounter(boolean) validateSignatureCounter} is <code>
+ +526 + + + + + + +
   *     true</code>, the {@link AuthenticatorData#getSignatureCounter() signature count} in the
+ +527 + + + + + + +
   *     response is less than or equal to the {@link RegisteredCredential#getSignatureCount()
+ +528 + + + + + + +
   *     stored signature count}, and at least one of the signature count values is nonzero.
+ +529 + + + + + + +
   * @throws AssertionFailedException if validation fails for any other reason.
+ +530 + + + + + + +
   */
+ +531 + + + + + + +
  public AssertionResultV2<C> finishAssertion(FinishAssertionOptions finishAssertionOptions)
+ +532 + + + + + + +
      throws AssertionFailedException {
+ +533 + + + + + + +
    try {
+ +534 + + +1 + +1. finishAssertion : replaced return value with null for com/yubico/webauthn/RelyingPartyV2::finishAssertion → KILLED
+ +
+
+
      return _finishAssertion(finishAssertionOptions).runV2();
+ +535 + + + + + + +
    } catch (IllegalArgumentException e) {
+ +536 + + + + + + +
      throw new AssertionFailedException(e);
+ +537 + + + + + + +
    }
+ +538 + + + + + + +
  }
+ +539 + + + + + + +
+ +540 + + + + + + +
  /**
+ +541 + + + + + + +
   * This method is NOT part of the public API.
+ +542 + + + + + + +
   *
+ +543 + + + + + + +
   * <p>This method is called internally by {@link #finishAssertion(FinishAssertionOptions)}. It is
+ +544 + + + + + + +
   * a separate method to facilitate testing; users should call {@link
+ +545 + + + + + + +
   * #finishAssertion(FinishAssertionOptions)} instead of this method.
+ +546 + + + + + + +
   */
+ +547 + + + + + + +
  FinishAssertionSteps<C> _finishAssertion(FinishAssertionOptions options) {
+ +548 + + +1 + +1. _finishAssertion : replaced return value with null for com/yubico/webauthn/RelyingPartyV2::_finishAssertion → KILLED
+ +
+
+
    return new FinishAssertionSteps<C>(this, options);
+ +549 + + + + + + +
  }
+ +550 + + + + + + +
+ +551 + + + + + + +
  static <C extends CredentialRecord> RelyingPartyV2Builder<C> builder(
+ +552 + + + + + + +
      RelyingPartyIdentity identity, CredentialRepositoryV2<C> credentialRepository) {
+ +553 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/RelyingPartyV2::builder → KILLED
+ +
+
+
    return new RelyingPartyV2Builder<C>()
+ +554 + + + + + + +
        .identity(identity)
+ +555 + + + + + + +
        .credentialRepository(credentialRepository);
+ +556 + + + + + + +
  }
+ +557 + + + + + + +
+ +558 + + + + + + +
  public static class RelyingPartyV2Builder<C extends CredentialRecord> {
+ +559 + + + + + + +
    private @NonNull Optional<AppId> appId = Optional.empty();
+ +560 + + + + + + +
    private @NonNull Optional<AttestationConveyancePreference> attestationConveyancePreference =
+ +561 + + + + + + +
        Optional.empty();
+ +562 + + + + + + +
    private @NonNull Optional<AttestationTrustSource> attestationTrustSource = Optional.empty();
+ +563 + + + + + + +
+ +564 + + + + + + +
    /**
+ +565 + + + + + + +
     * The extension input to set for the <code>appid</code> and <code>appidExclude</code>
+ +566 + + + + + + +
     * extensions.
+ +567 + + + + + + +
     *
+ +568 + + + + + + +
     * <p>You do not need this extension if you have not previously supported U2F. Its purpose is to
+ +569 + + + + + + +
     * make already-registered U2F credentials forward-compatible with the WebAuthn API. It is not
+ +570 + + + + + + +
     * needed for new registrations, even of U2F authenticators.
+ +571 + + + + + + +
     *
+ +572 + + + + + + +
     * <p>If this member is set, {@link #startAssertion(StartAssertionOptions) startAssertion} will
+ +573 + + + + + + +
     * automatically set the <code>appid</code> extension input, and {@link
+ +574 + + + + + + +
     * #finishAssertion(FinishAssertionOptions) finishAssertion} will adjust its verification logic
+ +575 + + + + + + +
     * to also accept this AppID as an alternative to the RP ID. Likewise, {@link
+ +576 + + + + + + +
     * #startRegistration(StartRegistrationOptions)} startRegistration} will automatically set the
+ +577 + + + + + + +
     * <code>appidExclude</code> extension input.
+ +578 + + + + + + +
     *
+ +579 + + + + + + +
     * <p>By default, this is not set.
+ +580 + + + + + + +
     *
+ +581 + + + + + + +
     * @see AssertionExtensionInputs#getAppid()
+ +582 + + + + + + +
     * @see RegistrationExtensionInputs#getAppidExclude()
+ +583 + + + + + + +
     * @see <a
+ +584 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +585 + + + + + + +
     *     FIDO AppID Extension (appid)</a>
+ +586 + + + + + + +
     * @see <a
+ +587 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.
+ +588 + + + + + + +
     *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +589 + + + + + + +
     */
+ +590 + + +1 + +1. appId : negated conditional → KILLED
+ +
+
+
    public RelyingPartyV2Builder<C> appId(@NonNull Optional<AppId> appId) {
+ +591 + + + + + + +
      this.appId = appId;
+ +592 + + +1 + +1. appId : replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::appId → KILLED
+ +
+
+
      return this;
+ +593 + + + + + + +
    }
+ +594 + + + + + + +
+ +595 + + + + + + +
    /**
+ +596 + + + + + + +
     * The extension input to set for the <code>appid</code> and <code>appidExclude</code>
+ +597 + + + + + + +
     * extensions.
+ +598 + + + + + + +
     *
+ +599 + + + + + + +
     * <p>You do not need this extension if you have not previously supported U2F. Its purpose is to
+ +600 + + + + + + +
     * make already-registered U2F credentials forward-compatible with the WebAuthn API. It is not
+ +601 + + + + + + +
     * needed for new registrations, even of U2F authenticators.
+ +602 + + + + + + +
     *
+ +603 + + + + + + +
     * <p>If this member is set, {@link #startAssertion(StartAssertionOptions) startAssertion} will
+ +604 + + + + + + +
     * automatically set the <code>appid</code> extension input, and {@link
+ +605 + + + + + + +
     * #finishAssertion(FinishAssertionOptions) finishAssertion} will adjust its verification logic
+ +606 + + + + + + +
     * to also accept this AppID as an alternative to the RP ID. Likewise, {@link
+ +607 + + + + + + +
     * #startRegistration(StartRegistrationOptions)} startRegistration} will automatically set the
+ +608 + + + + + + +
     * <code>appidExclude</code> extension input.
+ +609 + + + + + + +
     *
+ +610 + + + + + + +
     * <p>By default, this is not set.
+ +611 + + + + + + +
     *
+ +612 + + + + + + +
     * @see AssertionExtensionInputs#getAppid()
+ +613 + + + + + + +
     * @see RegistrationExtensionInputs#getAppidExclude()
+ +614 + + + + + + +
     * @see <a
+ +615 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-extension">§10.1.
+ +616 + + + + + + +
     *     FIDO AppID Extension (appid)</a>
+ +617 + + + + + + +
     * @see <a
+ +618 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-appid-exclude-extension">§10.2.
+ +619 + + + + + + +
     *     FIDO AppID Exclusion Extension (appidExclude)</a>
+ +620 + + + + + + +
     */
+ +621 + + +1 + +1. appId : negated conditional → KILLED
+ +
+
+
    public RelyingPartyV2Builder<C> appId(@NonNull AppId appId) {
+ +622 + + +1 + +1. appId : replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::appId → KILLED
+ +
+
+
      return this.appId(Optional.of(appId));
+ +623 + + + + + + +
    }
+ +624 + + + + + + +
+ +625 + + + + + + +
    /**
+ +626 + + + + + + +
     * The argument for the {@link PublicKeyCredentialCreationOptions#getAttestation() attestation}
+ +627 + + + + + + +
     * parameter in registration operations.
+ +628 + + + + + + +
     *
+ +629 + + + + + + +
     * <p>Unless your application has a concrete policy for authenticator attestation, it is
+ +630 + + + + + + +
     * recommended to leave this parameter undefined.
+ +631 + + + + + + +
     *
+ +632 + + + + + + +
     * <p>If you set this, you may want to explicitly set {@link
+ +633 + + + + + + +
     * RelyingPartyV2Builder#allowUntrustedAttestation(boolean) allowUntrustedAttestation} and
+ +634 + + + + + + +
     * {@link RelyingPartyV2Builder#attestationTrustSource(AttestationTrustSource)
+ +635 + + + + + + +
     * attestationTrustSource} too.
+ +636 + + + + + + +
     *
+ +637 + + + + + + +
     * <p>By default, this is not set.
+ +638 + + + + + + +
     *
+ +639 + + + + + + +
     * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +640 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +641 + + + + + + +
     *     Attestation</a>
+ +642 + + + + + + +
     */
+ +643 + + + + + + +
    public RelyingPartyV2Builder<C> attestationConveyancePreference(
+ +644 + + +1 + +1. attestationConveyancePreference : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<AttestationConveyancePreference> attestationConveyancePreference) {
+ +645 + + + + + + +
      this.attestationConveyancePreference = attestationConveyancePreference;
+ +646 + + +1 + +1. attestationConveyancePreference : replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationConveyancePreference → KILLED
+ +
+
+
      return this;
+ +647 + + + + + + +
    }
+ +648 + + + + + + +
+ +649 + + + + + + +
    /**
+ +650 + + + + + + +
     * The argument for the {@link PublicKeyCredentialCreationOptions#getAttestation() attestation}
+ +651 + + + + + + +
     * parameter in registration operations.
+ +652 + + + + + + +
     *
+ +653 + + + + + + +
     * <p>Unless your application has a concrete policy for authenticator attestation, it is
+ +654 + + + + + + +
     * recommended to leave this parameter undefined.
+ +655 + + + + + + +
     *
+ +656 + + + + + + +
     * <p>If you set this, you may want to explicitly set {@link
+ +657 + + + + + + +
     * RelyingPartyV2Builder#allowUntrustedAttestation(boolean) allowUntrustedAttestation} and
+ +658 + + + + + + +
     * {@link RelyingPartyV2Builder#attestationTrustSource(AttestationTrustSource)
+ +659 + + + + + + +
     * attestationTrustSource} too.
+ +660 + + + + + + +
     *
+ +661 + + + + + + +
     * <p>By default, this is not set.
+ +662 + + + + + + +
     *
+ +663 + + + + + + +
     * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +664 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +665 + + + + + + +
     *     Attestation</a>
+ +666 + + + + + + +
     */
+ +667 + + + + + + +
    public RelyingPartyV2Builder<C> attestationConveyancePreference(
+ +668 + + +1 + +1. attestationConveyancePreference : negated conditional → KILLED
+ +
+
+
        @NonNull AttestationConveyancePreference attestationConveyancePreference) {
+ +669 + + +1 + +1. attestationConveyancePreference : replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationConveyancePreference → KILLED
+ +
+
+
      return this.attestationConveyancePreference(Optional.of(attestationConveyancePreference));
+ +670 + + + + + + +
    }
+ +671 + + + + + + +
+ +672 + + + + + + +
    /**
+ +673 + + + + + + +
     * An {@link AttestationTrustSource} instance to use for looking up trust roots for
+ +674 + + + + + + +
     * authenticator attestation. This matters only if {@link #getAttestationConveyancePreference()}
+ +675 + + + + + + +
     * is non-empty and not set to {@link AttestationConveyancePreference#NONE}.
+ +676 + + + + + + +
     *
+ +677 + + + + + + +
     * <p>By default, this is not set.
+ +678 + + + + + + +
     *
+ +679 + + + + + + +
     * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +680 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +681 + + + + + + +
     *     Attestation</a>
+ +682 + + + + + + +
     */
+ +683 + + + + + + +
    public RelyingPartyV2Builder<C> attestationTrustSource(
+ +684 + + +1 + +1. attestationTrustSource : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<AttestationTrustSource> attestationTrustSource) {
+ +685 + + + + + + +
      this.attestationTrustSource = attestationTrustSource;
+ +686 + + +1 + +1. attestationTrustSource : replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationTrustSource → KILLED
+ +
+
+
      return this;
+ +687 + + + + + + +
    }
+ +688 + + + + + + +
+ +689 + + + + + + +
    /**
+ +690 + + + + + + +
     * An {@link AttestationTrustSource} instance to use for looking up trust roots for
+ +691 + + + + + + +
     * authenticator attestation. This matters only if {@link #getAttestationConveyancePreference()}
+ +692 + + + + + + +
     * is non-empty and not set to {@link AttestationConveyancePreference#NONE}.
+ +693 + + + + + + +
     *
+ +694 + + + + + + +
     * <p>By default, this is not set.
+ +695 + + + + + + +
     *
+ +696 + + + + + + +
     * @see PublicKeyCredentialCreationOptions#getAttestation()
+ +697 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-attestation">§6.4.
+ +698 + + + + + + +
     *     Attestation</a>
+ +699 + + + + + + +
     */
+ +700 + + + + + + +
    public RelyingPartyV2Builder<C> attestationTrustSource(
+ +701 + + +1 + +1. attestationTrustSource : negated conditional → KILLED
+ +
+
+
        @NonNull AttestationTrustSource attestationTrustSource) {
+ +702 + + +1 + +1. attestationTrustSource : replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationTrustSource → KILLED
+ +
+
+
      return this.attestationTrustSource(Optional.of(attestationTrustSource));
+ +703 + + + + + + +
    }
+ +704 + + + + + + +
  }
+ +705 + + + + + + +
}

Mutations

372 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
374 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
376 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
377 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
378 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
387 + + + +

1.1
Location : <init>
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
416 + + + +

1.1
Location : generateChallenge
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
removed call to java/security/SecureRandom::nextBytes → KILLED

+
417 + + + +

1.1
Location : generateChallenge
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2::generateChallenge → KILLED

+
428 + + + +

1.1
Location : filterAvailableAlgorithms
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingPartyV2::filterAvailableAlgorithms → KILLED

+
456 + + + +

1.1
Location : startRegistration
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
removed call to java/util/Optional::ifPresent → KILLED

+
457 + + + +

1.1
Location : startRegistration
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2::startRegistration → KILLED

+
463 + + + +

1.1
Location : finishRegistration
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2::finishRegistration → KILLED

+
477 + + + +

1.1
Location : _finishRegistration
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2::_finishRegistration → KILLED

+
481 + + + +

1.1
Location : startAssertion
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

2.2
Location : startAssertion
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
494 + + + +

1.1
Location : lambda$startAssertion$1
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$1 → KILLED

+
497 + + + +

1.1
Location : lambda$startAssertion$0
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$0 → KILLED

+
507 + + + +

1.1
Location : lambda$startAssertion$2
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$2 → KILLED

+
514 + + + +

1.1
Location : startAssertion
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
removed call to java/util/Optional::ifPresent → KILLED

+
516 + + + +

1.1
Location : startAssertion
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2::startAssertion → KILLED

+
534 + + + +

1.1
Location : finishAssertion
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2::finishAssertion → KILLED

+
548 + + + +

1.1
Location : _finishAssertion
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2::_finishAssertion → KILLED

+
553 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2::builder → KILLED

+
590 + + + +

1.1
Location : appId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
592 + + + +

1.1
Location : appId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::appId → KILLED

+
621 + + + +

1.1
Location : appId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
622 + + + +

1.1
Location : appId
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::appId → KILLED

+
644 + + + +

1.1
Location : attestationConveyancePreference
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
646 + + + +

1.1
Location : attestationConveyancePreference
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationConveyancePreference → KILLED

+
668 + + + +

1.1
Location : attestationConveyancePreference
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
669 + + + +

1.1
Location : attestationConveyancePreference
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationConveyancePreference → KILLED

+
684 + + + +

1.1
Location : attestationTrustSource
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
686 + + + +

1.1
Location : attestationTrustSource
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationTrustSource → KILLED

+
701 + + + +

1.1
Location : attestationTrustSource
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
702 + + + +

1.1
Location : attestationTrustSource
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationTrustSource → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/StartAssertionOptions.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/StartAssertionOptions.java.html new file mode 100644 index 000000000..ad87afd01 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/StartAssertionOptions.java.html @@ -0,0 +1,5901 @@ + + + + + + + + + +

StartAssertionOptions.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.webauthn.data.AssertionExtensionInputs;
+ +28 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +29 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialRequestOptions;
+ +30 + + + + + + +
import com.yubico.webauthn.data.UserVerificationRequirement;
+ +31 + + + + + + +
import java.util.Optional;
+ +32 + + + + + + +
import lombok.Builder;
+ +33 + + + + + + +
import lombok.NonNull;
+ +34 + + + + + + +
import lombok.Value;
+ +35 + + + + + + +
+ +36 + + + + + + +
/** Parameters for {@link RelyingParty#startAssertion(StartAssertionOptions)}. */
+ +37 + + + + + + +
@Value
+ +38 + + + + + + +
@Builder(toBuilder = true)
+ +39 + + + + + + +
public class StartAssertionOptions {
+ +40 + + + + + + +
+ +41 + + + + + + +
  private final String username;
+ +42 + + + + + + +
+ +43 + + + + + + +
  private final ByteArray userHandle;
+ +44 + + + + + + +
+ +45 + + + + + + +
  /**
+ +46 + + + + + + +
   * Extension inputs for this authentication operation.
+ +47 + + + + + + +
   *
+ +48 + + + + + + +
   * <p>If {@link RelyingParty#getAppId()} is set, {@link
+ +49 + + + + + + +
   * RelyingParty#startAssertion(StartAssertionOptions)} will overwrite any {@link
+ +50 + + + + + + +
   * AssertionExtensionInputs#getAppid() appId} extension input set herein.
+ +51 + + + + + + +
   *
+ +52 + + + + + + +
   * <p>The default specifies no extension inputs.
+ +53 + + + + + + +
   */
+ +54 + + + + + + +
  @NonNull @Builder.Default
+ +55 + + + + + + +
  private final AssertionExtensionInputs extensions = AssertionExtensionInputs.builder().build();
+ +56 + + + + + + +
+ +57 + + + + + + +
  /**
+ +58 + + + + + + +
   * The value for {@link PublicKeyCredentialRequestOptions#getUserVerification()} for this
+ +59 + + + + + + +
   * authentication operation.
+ +60 + + + + + + +
   *
+ +61 + + + + + + +
   * <p>If set to {@link UserVerificationRequirement#REQUIRED}, then {@link
+ +62 + + + + + + +
   * RelyingParty#finishAssertion(FinishAssertionOptions)} will enforce that <a
+ +63 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408#user-verification">user
+ +64 + + + + + + +
   * verification</a>was performed in this authentication ceremony.
+ +65 + + + + + + +
   *
+ +66 + + + + + + +
   * <p>The default is {@link UserVerificationRequirement#PREFERRED}.
+ +67 + + + + + + +
   */
+ +68 + + + + + + +
  private final UserVerificationRequirement userVerification;
+ +69 + + + + + + +
+ +70 + + + + + + +
  /**
+ +71 + + + + + + +
   * The value for {@link PublicKeyCredentialRequestOptions#getTimeout()} for this authentication
+ +72 + + + + + + +
   * operation.
+ +73 + + + + + + +
   *
+ +74 + + + + + + +
   * <p>This library does not take the timeout into account in any way, other than passing it
+ +75 + + + + + + +
   * through to the {@link PublicKeyCredentialRequestOptions} so it can be used as an argument to
+ +76 + + + + + + +
   * <code>navigator.credentials.get()</code> on the client side.
+ +77 + + + + + + +
   *
+ +78 + + + + + + +
   * <p>The default is empty.
+ +79 + + + + + + +
   */
+ +80 + + + + + + +
  private final Long timeout;
+ +81 + + + + + + +
+ +82 + + + + + + +
  /**
+ +83 + + + + + + +
   * The username of the user to authenticate, if the user has already been identified.
+ +84 + + + + + + +
   *
+ +85 + + + + + + +
   * <p>Mutually exclusive with {@link #getUserHandle()}.
+ +86 + + + + + + +
   *
+ +87 + + + + + + +
   * <p>If this or {@link #getUserHandle()} is present, then {@link
+ +88 + + + + + + +
   * RelyingParty#startAssertion(StartAssertionOptions)} will set {@link
+ +89 + + + + + + +
   * PublicKeyCredentialRequestOptions#getAllowCredentials()} to the list of that user's
+ +90 + + + + + + +
   * credentials.
+ +91 + + + + + + +
   *
+ +92 + + + + + + +
   * <p>If this and {@link #getUserHandle()} are both absent, that implies authentication with a
+ +93 + + + + + + +
   * discoverable credential (passkey) - meaning identification of the user is deferred until after
+ +94 + + + + + + +
   * receiving the response from the client.
+ +95 + + + + + + +
   *
+ +96 + + + + + + +
   * <p>The default is empty (absent).
+ +97 + + + + + + +
   *
+ +98 + + + + + + +
   * @see <a
+ +99 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">Client-side-discoverable
+ +100 + + + + + + +
   *     credential</a>
+ +101 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +102 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +103 + + + + + + +
   */
+ +104 + + + + + + +
  public Optional<String> getUsername() {
+ +105 + + +1 + +1. getUsername : replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUsername → KILLED
+ +
+
+
    return Optional.ofNullable(username);
+ +106 + + + + + + +
  }
+ +107 + + + + + + +
+ +108 + + + + + + +
  /**
+ +109 + + + + + + +
   * The user handle of the user to authenticate, if the user has already been identified.
+ +110 + + + + + + +
   *
+ +111 + + + + + + +
   * <p>Mutually exclusive with {@link #getUsername()}.
+ +112 + + + + + + +
   *
+ +113 + + + + + + +
   * <p>If this or {@link #getUsername()} is present, then {@link
+ +114 + + + + + + +
   * RelyingParty#startAssertion(StartAssertionOptions)} will set {@link
+ +115 + + + + + + +
   * PublicKeyCredentialRequestOptions#getAllowCredentials()} to the list of that user's
+ +116 + + + + + + +
   * credentials.
+ +117 + + + + + + +
   *
+ +118 + + + + + + +
   * <p>If this and {@link #getUsername()} are both absent, that implies authentication with a
+ +119 + + + + + + +
   * discoverable credential (passkey) - meaning identification of the user is deferred until after
+ +120 + + + + + + +
   * receiving the response from the client.
+ +121 + + + + + + +
   *
+ +122 + + + + + + +
   * <p>The default is empty (absent).
+ +123 + + + + + + +
   *
+ +124 + + + + + + +
   * @see #getUsername()
+ +125 + + + + + + +
   * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-handle">User Handle</a>
+ +126 + + + + + + +
   * @see <a
+ +127 + + + + + + +
   *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">Client-side-discoverable
+ +128 + + + + + + +
   *     credential</a>
+ +129 + + + + + + +
   * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +130 + + + + + + +
   *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +131 + + + + + + +
   */
+ +132 + + + + + + +
  public Optional<ByteArray> getUserHandle() {
+ +133 + + +1 + +1. getUserHandle : replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUserHandle → KILLED
+ +
+
+
    return Optional.ofNullable(userHandle);
+ +134 + + + + + + +
  }
+ +135 + + + + + + +
+ +136 + + + + + + +
  /**
+ +137 + + + + + + +
   * The value for {@link PublicKeyCredentialRequestOptions#getUserVerification()} for this
+ +138 + + + + + + +
   * authentication operation.
+ +139 + + + + + + +
   *
+ +140 + + + + + + +
   * <p>If set to {@link UserVerificationRequirement#REQUIRED}, then {@link
+ +141 + + + + + + +
   * RelyingParty#finishAssertion(FinishAssertionOptions)} will enforce that <a
+ +142 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408#user-verification">user
+ +143 + + + + + + +
   * verification</a>was performed in this authentication ceremony.
+ +144 + + + + + + +
   *
+ +145 + + + + + + +
   * <p>The default is {@link UserVerificationRequirement#PREFERRED}.
+ +146 + + + + + + +
   */
+ +147 + + + + + + +
  public Optional<UserVerificationRequirement> getUserVerification() {
+ +148 + + +1 + +1. getUserVerification : replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUserVerification → KILLED
+ +
+
+
    return Optional.ofNullable(userVerification);
+ +149 + + + + + + +
  }
+ +150 + + + + + + +
+ +151 + + + + + + +
  /**
+ +152 + + + + + + +
   * The value for {@link PublicKeyCredentialRequestOptions#getTimeout()} for this authentication
+ +153 + + + + + + +
   * operation.
+ +154 + + + + + + +
   *
+ +155 + + + + + + +
   * <p>This library does not take the timeout into account in any way, other than passing it
+ +156 + + + + + + +
   * through to the {@link PublicKeyCredentialRequestOptions} so it can be used as an argument to
+ +157 + + + + + + +
   * <code>navigator.credentials.get()</code> on the client side.
+ +158 + + + + + + +
   *
+ +159 + + + + + + +
   * <p>The default is empty.
+ +160 + + + + + + +
   */
+ +161 + + + + + + +
  public Optional<Long> getTimeout() {
+ +162 + + +1 + +1. getTimeout : replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getTimeout → KILLED
+ +
+
+
    return Optional.ofNullable(timeout);
+ +163 + + + + + + +
  }
+ +164 + + + + + + +
+ +165 + + + + + + +
  public static class StartAssertionOptionsBuilder {
+ +166 + + + + + + +
    private String username = null;
+ +167 + + + + + + +
    private ByteArray userHandle = null;
+ +168 + + + + + + +
    private UserVerificationRequirement userVerification = null;
+ +169 + + + + + + +
    private Long timeout = null;
+ +170 + + + + + + +
+ +171 + + + + + + +
    /**
+ +172 + + + + + + +
     * The username of the user to authenticate, if the user has already been identified.
+ +173 + + + + + + +
     *
+ +174 + + + + + + +
     * <p>Mutually exclusive with {@link #userHandle(Optional)}. Setting this to a present value
+ +175 + + + + + + +
     * will set {@link #userHandle(Optional)} to empty.
+ +176 + + + + + + +
     *
+ +177 + + + + + + +
     * <p>If this or {@link #userHandle(Optional)} is present, then {@link
+ +178 + + + + + + +
     * RelyingParty#startAssertion(StartAssertionOptions)} will set {@link
+ +179 + + + + + + +
     * PublicKeyCredentialRequestOptions#getAllowCredentials()} to the list of that user's
+ +180 + + + + + + +
     * credentials.
+ +181 + + + + + + +
     *
+ +182 + + + + + + +
     * <p>If this and {@link #getUserHandle()} are both absent, that implies authentication with a
+ +183 + + + + + + +
     * discoverable credential (passkey) - meaning identification of the user is deferred until
+ +184 + + + + + + +
     * after receiving the response from the client.
+ +185 + + + + + + +
     *
+ +186 + + + + + + +
     * <p>The default is empty (absent).
+ +187 + + + + + + +
     *
+ +188 + + + + + + +
     * @see #username(String)
+ +189 + + + + + + +
     * @see #userHandle(Optional)
+ +190 + + + + + + +
     * @see #userHandle(ByteArray)
+ +191 + + + + + + +
     * @see <a
+ +192 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">Client-side-discoverable
+ +193 + + + + + + +
     *     credential</a>
+ +194 + + + + + + +
     * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +195 + + + + + + +
     *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +196 + + + + + + +
     */
+ +197 + + +1 + +1. username : negated conditional → KILLED
+ +
+
+
    public StartAssertionOptionsBuilder username(@NonNull Optional<String> username) {
+ +198 + + + + + + +
      this.username = username.orElse(null);
+ +199 + + +1 + +1. username : negated conditional → KILLED
+ +
+
+
      if (username.isPresent()) {
+ +200 + + + + + + +
        this.userHandle = null;
+ +201 + + + + + + +
      }
+ +202 + + +1 + +1. username : replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::username → KILLED
+ +
+
+
      return this;
+ +203 + + + + + + +
    }
+ +204 + + + + + + +
+ +205 + + + + + + +
    /**
+ +206 + + + + + + +
     * The username of the user to authenticate, if the user has already been identified.
+ +207 + + + + + + +
     *
+ +208 + + + + + + +
     * <p>Mutually exclusive with {@link #userHandle(Optional)}. Setting this to a non-null value
+ +209 + + + + + + +
     * will set {@link #userHandle(Optional)} to empty.
+ +210 + + + + + + +
     *
+ +211 + + + + + + +
     * <p>If this or {@link #userHandle(Optional)} is present, then {@link
+ +212 + + + + + + +
     * RelyingParty#startAssertion(StartAssertionOptions)} will set {@link
+ +213 + + + + + + +
     * PublicKeyCredentialRequestOptions#getAllowCredentials()} to the list of that user's
+ +214 + + + + + + +
     * credentials.
+ +215 + + + + + + +
     *
+ +216 + + + + + + +
     * <p>If this and {@link #getUserHandle()} are both absent, that implies authentication with a
+ +217 + + + + + + +
     * discoverable credential (passkey) - meaning identification of the user is deferred until
+ +218 + + + + + + +
     * after receiving the response from the client.
+ +219 + + + + + + +
     *
+ +220 + + + + + + +
     * <p>The default is empty (absent).
+ +221 + + + + + + +
     *
+ +222 + + + + + + +
     * @see #username(Optional)
+ +223 + + + + + + +
     * @see #userHandle(Optional)
+ +224 + + + + + + +
     * @see #userHandle(ByteArray)
+ +225 + + + + + + +
     * @see <a
+ +226 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">Client-side-discoverable
+ +227 + + + + + + +
     *     credential</a>
+ +228 + + + + + + +
     * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +229 + + + + + + +
     *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +230 + + + + + + +
     */
+ +231 + + + + + + +
    public StartAssertionOptionsBuilder username(String username) {
+ +232 + + +1 + +1. username : replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::username → KILLED
+ +
+
+
      return this.username(Optional.ofNullable(username));
+ +233 + + + + + + +
    }
+ +234 + + + + + + +
+ +235 + + + + + + +
    /**
+ +236 + + + + + + +
     * The user handle of the user to authenticate, if the user has already been identified.
+ +237 + + + + + + +
     *
+ +238 + + + + + + +
     * <p>Mutually exclusive with {@link #username(Optional)}. Setting this to a present value will
+ +239 + + + + + + +
     * set {@link #username(Optional)} to empty.
+ +240 + + + + + + +
     *
+ +241 + + + + + + +
     * <p>If this or {@link #username(Optional)} is present, then {@link
+ +242 + + + + + + +
     * RelyingParty#startAssertion(StartAssertionOptions)} will set {@link
+ +243 + + + + + + +
     * PublicKeyCredentialRequestOptions#getAllowCredentials()} to the list of that user's
+ +244 + + + + + + +
     * credentials.
+ +245 + + + + + + +
     *
+ +246 + + + + + + +
     * <p>If this and {@link #getUsername()} are both absent, that implies authentication with a
+ +247 + + + + + + +
     * discoverable credential (passkey) - meaning identification of the user is deferred until
+ +248 + + + + + + +
     * after receiving the response from the client.
+ +249 + + + + + + +
     *
+ +250 + + + + + + +
     * <p>The default is empty (absent).
+ +251 + + + + + + +
     *
+ +252 + + + + + + +
     * @see #username(String)
+ +253 + + + + + + +
     * @see #username(Optional)
+ +254 + + + + + + +
     * @see #userHandle(ByteArray)
+ +255 + + + + + + +
     * @see <a href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-handle">User
+ +256 + + + + + + +
     *     Handle</a>
+ +257 + + + + + + +
     * @see <a
+ +258 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">Client-side-discoverable
+ +259 + + + + + + +
     *     credential</a>
+ +260 + + + + + + +
     * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +261 + + + + + + +
     *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +262 + + + + + + +
     */
+ +263 + + +1 + +1. userHandle : negated conditional → KILLED
+ +
+
+
    public StartAssertionOptionsBuilder userHandle(@NonNull Optional<ByteArray> userHandle) {
+ +264 + + + + + + +
      this.userHandle = userHandle.orElse(null);
+ +265 + + +1 + +1. userHandle : negated conditional → KILLED
+ +
+
+
      if (userHandle.isPresent()) {
+ +266 + + + + + + +
        this.username = null;
+ +267 + + + + + + +
      }
+ +268 + + +1 + +1. userHandle : replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userHandle → KILLED
+ +
+
+
      return this;
+ +269 + + + + + + +
    }
+ +270 + + + + + + +
+ +271 + + + + + + +
    /**
+ +272 + + + + + + +
     * The user handle of the user to authenticate, if the user has already been identified.
+ +273 + + + + + + +
     *
+ +274 + + + + + + +
     * <p>Mutually exclusive with {@link #username(Optional)}. Setting this to a non-null value will
+ +275 + + + + + + +
     * set {@link #username(Optional)} to empty.
+ +276 + + + + + + +
     *
+ +277 + + + + + + +
     * <p>If this or {@link #username(Optional)} is present, then {@link
+ +278 + + + + + + +
     * RelyingParty#startAssertion(StartAssertionOptions)} will set {@link
+ +279 + + + + + + +
     * PublicKeyCredentialRequestOptions#getAllowCredentials()} to the list of that user's
+ +280 + + + + + + +
     * credentials.
+ +281 + + + + + + +
     *
+ +282 + + + + + + +
     * <p>If this and {@link #getUsername()} are both absent, that implies authentication with a
+ +283 + + + + + + +
     * discoverable credential (passkey) - meaning identification of the user is deferred until
+ +284 + + + + + + +
     * after receiving the response from the client.
+ +285 + + + + + + +
     *
+ +286 + + + + + + +
     * <p>The default is empty (absent).
+ +287 + + + + + + +
     *
+ +288 + + + + + + +
     * @see #username(String)
+ +289 + + + + + + +
     * @see #username(Optional)
+ +290 + + + + + + +
     * @see #userHandle(Optional)
+ +291 + + + + + + +
     * @see <a
+ +292 + + + + + + +
     *     href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#client-side-discoverable-public-key-credential-source">Client-side-discoverable
+ +293 + + + + + + +
     *     credential</a>
+ +294 + + + + + + +
     * @see <a href="https://passkeys.dev/docs/reference/terms/#passkey">Passkey</a> in <a
+ +295 + + + + + + +
     *     href="https://passkeys.dev">passkeys.dev</a> reference
+ +296 + + + + + + +
     */
+ +297 + + + + + + +
    public StartAssertionOptionsBuilder userHandle(ByteArray userHandle) {
+ +298 + + +1 + +1. userHandle : replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userHandle → KILLED
+ +
+
+
      return this.userHandle(Optional.ofNullable(userHandle));
+ +299 + + + + + + +
    }
+ +300 + + + + + + +
+ +301 + + + + + + +
    /**
+ +302 + + + + + + +
     * The value for {@link PublicKeyCredentialRequestOptions#getUserVerification()} for this
+ +303 + + + + + + +
     * authentication operation.
+ +304 + + + + + + +
     *
+ +305 + + + + + + +
     * <p>If set to {@link UserVerificationRequirement#REQUIRED}, then {@link
+ +306 + + + + + + +
     * RelyingParty#finishAssertion(FinishAssertionOptions)} will enforce that <a
+ +307 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-verification">user
+ +308 + + + + + + +
     * verification</a>was performed in this authentication ceremony.
+ +309 + + + + + + +
     *
+ +310 + + + + + + +
     * <p>The default is {@link UserVerificationRequirement#PREFERRED}.
+ +311 + + + + + + +
     */
+ +312 + + + + + + +
    public StartAssertionOptionsBuilder userVerification(
+ +313 + + +1 + +1. userVerification : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<UserVerificationRequirement> userVerification) {
+ +314 + + + + + + +
      this.userVerification = userVerification.orElse(null);
+ +315 + + +1 + +1. userVerification : replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userVerification → KILLED
+ +
+
+
      return this;
+ +316 + + + + + + +
    }
+ +317 + + + + + + +
+ +318 + + + + + + +
    /**
+ +319 + + + + + + +
     * The value for {@link PublicKeyCredentialRequestOptions#getUserVerification()} for this
+ +320 + + + + + + +
     * authentication operation.
+ +321 + + + + + + +
     *
+ +322 + + + + + + +
     * <p>If set to {@link UserVerificationRequirement#REQUIRED}, then {@link
+ +323 + + + + + + +
     * RelyingParty#finishAssertion(FinishAssertionOptions)} will enforce that <a
+ +324 + + + + + + +
     * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#user-verification">user
+ +325 + + + + + + +
     * verification</a>was performed in this authentication ceremony.
+ +326 + + + + + + +
     *
+ +327 + + + + + + +
     * <p>The default is {@link UserVerificationRequirement#PREFERRED}.
+ +328 + + + + + + +
     */
+ +329 + + + + + + +
    public StartAssertionOptionsBuilder userVerification(
+ +330 + + + + + + +
        UserVerificationRequirement userVerification) {
+ +331 + + +1 + +1. userVerification : replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userVerification → KILLED
+ +
+
+
      return this.userVerification(Optional.ofNullable(userVerification));
+ +332 + + + + + + +
    }
+ +333 + + + + + + +
+ +334 + + + + + + +
    /**
+ +335 + + + + + + +
     * The value for {@link PublicKeyCredentialRequestOptions#getTimeout()} for this authentication
+ +336 + + + + + + +
     * operation.
+ +337 + + + + + + +
     *
+ +338 + + + + + + +
     * <p>This library does not take the timeout into account in any way, other than passing it
+ +339 + + + + + + +
     * through to the {@link PublicKeyCredentialRequestOptions} so it can be used as an argument to
+ +340 + + + + + + +
     * <code>navigator.credentials.get()</code> on the client side.
+ +341 + + + + + + +
     *
+ +342 + + + + + + +
     * <p>The default is empty.
+ +343 + + + + + + +
     */
+ +344 + + +1 + +1. timeout : negated conditional → KILLED
+ +
+
+
    public StartAssertionOptionsBuilder timeout(@NonNull Optional<Long> timeout) {
+ +345 + + +3 + +1. timeout : negated conditional → KILLED
+2. timeout : changed conditional boundary → KILLED
+3. timeout : negated conditional → KILLED
+ +
+
+
      if (timeout.isPresent() && timeout.get() <= 0) {
+ +346 + + + + + + +
        throw new IllegalArgumentException("timeout must be positive, was: " + timeout.get());
+ +347 + + + + + + +
      }
+ +348 + + + + + + +
      this.timeout = timeout.orElse(null);
+ +349 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout → KILLED
+ +
+
+
      return this;
+ +350 + + + + + + +
    }
+ +351 + + + + + + +
+ +352 + + + + + + +
    /**
+ +353 + + + + + + +
     * The value for {@link PublicKeyCredentialRequestOptions#getTimeout()} for this authentication
+ +354 + + + + + + +
     * operation.
+ +355 + + + + + + +
     *
+ +356 + + + + + + +
     * <p>This library does not take the timeout into account in any way, other than passing it
+ +357 + + + + + + +
     * through to the {@link PublicKeyCredentialRequestOptions} so it can be used as an argument to
+ +358 + + + + + + +
     * <code>navigator.credentials.get()</code> on the client side.
+ +359 + + + + + + +
     *
+ +360 + + + + + + +
     * <p>The default is empty.
+ +361 + + + + + + +
     */
+ +362 + + + + + + +
    public StartAssertionOptionsBuilder timeout(long timeout) {
+ +363 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout → KILLED
+ +
+
+
      return this.timeout(Optional.of(timeout));
+ +364 + + + + + + +
    }
+ +365 + + + + + + +
+ +366 + + + + + + +
    /*
+ +367 + + + + + + +
     * Workaround, see: https://github.com/rzwitserloot/lombok/issues/2623#issuecomment-714816001
+ +368 + + + + + + +
     * Consider reverting this workaround if Lombok fixes that issue.
+ +369 + + + + + + +
     */
+ +370 + + + + + + +
    private StartAssertionOptionsBuilder timeout(Long timeout) {
+ +371 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout → KILLED
+ +
+
+
      return this.timeout(Optional.ofNullable(timeout));
+ +372 + + + + + + +
    }
+ +373 + + + + + + +
  }
+ +374 + + + + + + +
}

Mutations

105 + + + +

1.1
Location : getUsername
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUsername → KILLED

+
133 + + + +

1.1
Location : getUserHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUserHandle → KILLED

+
148 + + + +

1.1
Location : getUserVerification
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUserVerification → KILLED

+
162 + + + +

1.1
Location : getTimeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getTimeout → KILLED

+
197 + + + +

1.1
Location : username
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
negated conditional → KILLED

+
199 + + + +

1.1
Location : username
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
202 + + + +

1.1
Location : username
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::username → KILLED

+
232 + + + +

1.1
Location : username
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::username → KILLED

+
263 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
265 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
268 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userHandle → KILLED

+
298 + + + +

1.1
Location : userHandle
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userHandle → KILLED

+
313 + + + +

1.1
Location : userVerification
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
negated conditional → KILLED

+
315 + + + +

1.1
Location : userVerification
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userVerification → KILLED

+
331 + + + +

1.1
Location : userVerification
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userVerification → KILLED

+
344 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
negated conditional → KILLED

+
345 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

2.2
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
changed conditional boundary → KILLED

3.3
Location : timeout
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
negated conditional → KILLED

+
349 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout → KILLED

+
363 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)
replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout → KILLED

+
371 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/StartRegistrationOptions.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/StartRegistrationOptions.java.html new file mode 100644 index 000000000..88ce7a4dd --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/StartRegistrationOptions.java.html @@ -0,0 +1,2598 @@ + + + + + + + + + +

StartRegistrationOptions.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.webauthn.data.AuthenticatorSelectionCriteria;
+ +28 + + + + + + +
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions;
+ +29 + + + + + + +
import com.yubico.webauthn.data.RegistrationExtensionInputs;
+ +30 + + + + + + +
import com.yubico.webauthn.data.UserIdentity;
+ +31 + + + + + + +
import java.util.Optional;
+ +32 + + + + + + +
import lombok.Builder;
+ +33 + + + + + + +
import lombok.NonNull;
+ +34 + + + + + + +
import lombok.Value;
+ +35 + + + + + + +
+ +36 + + + + + + +
/** Parameters for {@link RelyingParty#startRegistration(StartRegistrationOptions)}. */
+ +37 + + + + + + +
@Value
+ +38 + + + + + + +
@Builder(toBuilder = true)
+ +39 + + + + + + +
public class StartRegistrationOptions {
+ +40 + + + + + + +
+ +41 + + + + + + +
  /** Identifiers for the user creating a credential. */
+ +42 + + + + + + +
  @NonNull private final UserIdentity user;
+ +43 + + + + + + +
+ +44 + + + + + + +
  /**
+ +45 + + + + + + +
   * Constraints on what kind of authenticator the user is allowed to use to create the credential,
+ +46 + + + + + + +
   * and on features that authenticator must or should support.
+ +47 + + + + + + +
   */
+ +48 + + + + + + +
  private final AuthenticatorSelectionCriteria authenticatorSelection;
+ +49 + + + + + + +
+ +50 + + + + + + +
  /** Extension inputs for this registration operation. */
+ +51 + + + + + + +
  @NonNull @Builder.Default
+ +52 + + + + + + +
  private final RegistrationExtensionInputs extensions =
+ +53 + + + + + + +
      RegistrationExtensionInputs.builder().build();
+ +54 + + + + + + +
+ +55 + + + + + + +
  /**
+ +56 + + + + + + +
   * The value for {@link PublicKeyCredentialCreationOptions#getTimeout()} for this registration
+ +57 + + + + + + +
   * operation.
+ +58 + + + + + + +
   *
+ +59 + + + + + + +
   * <p>This library does not take the timeout into account in any way, other than passing it
+ +60 + + + + + + +
   * through to the {@link PublicKeyCredentialCreationOptions} so it can be used as an argument to
+ +61 + + + + + + +
   * <code>navigator.credentials.create()</code> on the client side.
+ +62 + + + + + + +
   *
+ +63 + + + + + + +
   * <p>The default is empty.
+ +64 + + + + + + +
   */
+ +65 + + + + + + +
  private final Long timeout;
+ +66 + + + + + + +
+ +67 + + + + + + +
  /**
+ +68 + + + + + + +
   * Constraints on what kind of authenticator the user is allowed to use to create the credential,
+ +69 + + + + + + +
   * and on features that authenticator must or should support.
+ +70 + + + + + + +
   */
+ +71 + + + + + + +
  public Optional<AuthenticatorSelectionCriteria> getAuthenticatorSelection() {
+ +72 + + +1 + +1. getAuthenticatorSelection : replaced return value with Optional.empty for com/yubico/webauthn/StartRegistrationOptions::getAuthenticatorSelection → KILLED
+ +
+
+
    return Optional.ofNullable(authenticatorSelection);
+ +73 + + + + + + +
  }
+ +74 + + + + + + +
+ +75 + + + + + + +
  /**
+ +76 + + + + + + +
   * The value for {@link PublicKeyCredentialCreationOptions#getTimeout()} for this registration
+ +77 + + + + + + +
   * operation.
+ +78 + + + + + + +
   *
+ +79 + + + + + + +
   * <p>This library does not take the timeout into account in any way, other than passing it
+ +80 + + + + + + +
   * through to the {@link PublicKeyCredentialCreationOptions} so it can be used as an argument to
+ +81 + + + + + + +
   * <code>navigator.credentials.create()</code> on the client side.
+ +82 + + + + + + +
   *
+ +83 + + + + + + +
   * <p>The default is empty.
+ +84 + + + + + + +
   */
+ +85 + + + + + + +
  public Optional<Long> getTimeout() {
+ +86 + + +1 + +1. getTimeout : replaced return value with Optional.empty for com/yubico/webauthn/StartRegistrationOptions::getTimeout → KILLED
+ +
+
+
    return Optional.ofNullable(timeout);
+ +87 + + + + + + +
  }
+ +88 + + + + + + +
+ +89 + + + + + + +
  public static StartRegistrationOptionsBuilder.MandatoryStages builder() {
+ +90 + + +1 + +1. builder : replaced return value with null for com/yubico/webauthn/StartRegistrationOptions::builder → KILLED
+ +
+
+
    return new StartRegistrationOptionsBuilder.MandatoryStages();
+ +91 + + + + + + +
  }
+ +92 + + + + + + +
+ +93 + + + + + + +
  public static class StartRegistrationOptionsBuilder {
+ +94 + + + + + + +
    private AuthenticatorSelectionCriteria authenticatorSelection = null;
+ +95 + + + + + + +
    private Long timeout = null;
+ +96 + + + + + + +
+ +97 + + + + + + +
    public static class MandatoryStages {
+ +98 + + + + + + +
      private final StartRegistrationOptionsBuilder builder = new StartRegistrationOptionsBuilder();
+ +99 + + + + + + +
+ +100 + + + + + + +
      /**
+ +101 + + + + + + +
       * {@link StartRegistrationOptionsBuilder#user(UserIdentity) user} is a required parameter.
+ +102 + + + + + + +
       *
+ +103 + + + + + + +
       * @see StartRegistrationOptionsBuilder#user(UserIdentity)
+ +104 + + + + + + +
       */
+ +105 + + + + + + +
      public StartRegistrationOptionsBuilder user(UserIdentity user) {
+ +106 + + +1 + +1. user : replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder$MandatoryStages::user → KILLED
+ +
+
+
        return builder.user(user);
+ +107 + + + + + + +
      }
+ +108 + + + + + + +
    }
+ +109 + + + + + + +
+ +110 + + + + + + +
    /**
+ +111 + + + + + + +
     * Constraints on what kind of authenticator the user is allowed to use to create the
+ +112 + + + + + + +
     * credential, and on features that authenticator must or should support.
+ +113 + + + + + + +
     */
+ +114 + + + + + + +
    public StartRegistrationOptionsBuilder authenticatorSelection(
+ +115 + + +1 + +1. authenticatorSelection : negated conditional → KILLED
+ +
+
+
        @NonNull Optional<AuthenticatorSelectionCriteria> authenticatorSelection) {
+ +116 + + +1 + +1. authenticatorSelection : replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::authenticatorSelection → KILLED
+ +
+
+
      return this.authenticatorSelection(authenticatorSelection.orElse(null));
+ +117 + + + + + + +
    }
+ +118 + + + + + + +
+ +119 + + + + + + +
    /**
+ +120 + + + + + + +
     * Constraints on what kind of authenticator the user is allowed to use to create the
+ +121 + + + + + + +
     * credential, and on features that authenticator must or should support.
+ +122 + + + + + + +
     */
+ +123 + + + + + + +
    public StartRegistrationOptionsBuilder authenticatorSelection(
+ +124 + + + + + + +
        AuthenticatorSelectionCriteria authenticatorSelection) {
+ +125 + + + + + + +
      this.authenticatorSelection = authenticatorSelection;
+ +126 + + +1 + +1. authenticatorSelection : replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::authenticatorSelection → KILLED
+ +
+
+
      return this;
+ +127 + + + + + + +
    }
+ +128 + + + + + + +
+ +129 + + + + + + +
    /**
+ +130 + + + + + + +
     * The value for {@link PublicKeyCredentialCreationOptions#getTimeout()} for this registration
+ +131 + + + + + + +
     * operation.
+ +132 + + + + + + +
     *
+ +133 + + + + + + +
     * <p>This library does not take the timeout into account in any way, other than passing it
+ +134 + + + + + + +
     * through to the {@link PublicKeyCredentialCreationOptions} so it can be used as an argument to
+ +135 + + + + + + +
     * <code>navigator.credentials.create()</code> on the client side.
+ +136 + + + + + + +
     *
+ +137 + + + + + + +
     * <p>The default is empty.
+ +138 + + + + + + +
     */
+ +139 + + +1 + +1. timeout : negated conditional → KILLED
+ +
+
+
    public StartRegistrationOptionsBuilder timeout(@NonNull Optional<Long> timeout) {
+ +140 + + +3 + +1. timeout : negated conditional → KILLED
+2. timeout : changed conditional boundary → KILLED
+3. timeout : negated conditional → KILLED
+ +
+
+
      if (timeout.isPresent() && timeout.get() <= 0) {
+ +141 + + + + + + +
        throw new IllegalArgumentException("timeout must be positive, was: " + timeout.get());
+ +142 + + + + + + +
      }
+ +143 + + + + + + +
      this.timeout = timeout.orElse(null);
+ +144 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::timeout → KILLED
+ +
+
+
      return this;
+ +145 + + + + + + +
    }
+ +146 + + + + + + +
+ +147 + + + + + + +
    /**
+ +148 + + + + + + +
     * The value for {@link PublicKeyCredentialCreationOptions#getTimeout()} for this registration
+ +149 + + + + + + +
     * operation.
+ +150 + + + + + + +
     *
+ +151 + + + + + + +
     * <p>This library does not take the timeout into account in any way, other than passing it
+ +152 + + + + + + +
     * through to the {@link PublicKeyCredentialCreationOptions} so it can be used as an argument to
+ +153 + + + + + + +
     * <code>navigator.credentials.create()</code> on the client side.
+ +154 + + + + + + +
     *
+ +155 + + + + + + +
     * <p>The default is empty.
+ +156 + + + + + + +
     */
+ +157 + + + + + + +
    public StartRegistrationOptionsBuilder timeout(long timeout) {
+ +158 + + +1 + +1. timeout : replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::timeout → KILLED
+ +
+
+
      return this.timeout(Optional.of(timeout));
+ +159 + + + + + + +
    }
+ +160 + + + + + + +
  }
+ +161 + + + + + + +
}

Mutations

72 + + + +

1.1
Location : getAuthenticatorSelection
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/StartRegistrationOptions::getAuthenticatorSelection → KILLED

+
86 + + + +

1.1
Location : getTimeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with Optional.empty for com/yubico/webauthn/StartRegistrationOptions::getTimeout → KILLED

+
90 + + + +

1.1
Location : builder
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/StartRegistrationOptions::builder → KILLED

+
106 + + + +

1.1
Location : user
Killed by : com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder$MandatoryStages::user → KILLED

+
115 + + + +

1.1
Location : authenticatorSelection
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
116 + + + +

1.1
Location : authenticatorSelection
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::authenticatorSelection → KILLED

+
126 + + + +

1.1
Location : authenticatorSelection
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::authenticatorSelection → KILLED

+
139 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
140 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

2.2
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
changed conditional boundary → KILLED

3.3
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
negated conditional → KILLED

+
144 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::timeout → KILLED

+
158 + + + +

1.1
Location : timeout
Killed by : com.yubico.webauthn.RelyingPartyStartOperationSpec
replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::timeout → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/TokenBindingValidator.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/TokenBindingValidator.java.html new file mode 100644 index 000000000..9c0a61d56 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/TokenBindingValidator.java.html @@ -0,0 +1,1436 @@ + + + + + + + + + +

TokenBindingValidator.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +28 + + + + + + +
import com.yubico.webauthn.data.TokenBindingInfo;
+ +29 + + + + + + +
import java.util.Optional;
+ +30 + + + + + + +
+ +31 + + + + + + +
final class TokenBindingValidator {
+ +32 + + + + + + +
+ +33 + + + + + + +
  static boolean validate(
+ +34 + + + + + + +
      Optional<TokenBindingInfo> clientTokenBinding, Optional<ByteArray> rpTokenBindingId) {
+ +35 + + +2 + +1. validate : replaced boolean return with false for com/yubico/webauthn/TokenBindingValidator::validate → SURVIVED
+2. validate : replaced boolean return with true for com/yubico/webauthn/TokenBindingValidator::validate → SURVIVED
+ +
+
+
    return rpTokenBindingId
+ +36 + + + + + + +
        .map(
+ +37 + + + + + + +
            rpToken ->
+ +38 + + + + + + +
                clientTokenBinding
+ +39 + + + + + + +
                    .map(
+ +40 + + + + + + +
                        tbi -> {
+ +41 + + + + + + +
                          switch (tbi.getStatus()) {
+ +42 + + + + + + +
                            case SUPPORTED:
+ +43 + + + + + + +
+ +44 + + + + + + +
                            case PRESENT:
+ +45 + + +2 + +1. lambda$validate$2 : replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$2 → SURVIVED
+2. lambda$validate$2 : replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$2 → SURVIVED
+ +
+
+
                              return tbi.getId()
+ +46 + + + + + + +
                                  .map(
+ +47 + + + + + + +
                                      id -> {
+ +48 + + +1 + +1. lambda$validate$0 : negated conditional → KILLED
+ +
+
+
                                        if (id.equals(rpToken)) {
+ +49 + + +1 + +1. lambda$validate$0 : replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$0 → SURVIVED
+ +
+
+
                                          return true;
+ +50 + + + + + + +
                                        } else {
+ +51 + + + + + + +
                                          throw new IllegalArgumentException(
+ +52 + + + + + + +
                                              "Incorrect token binding ID.");
+ +53 + + + + + + +
                                        }
+ +54 + + + + + + +
                                      })
+ +55 + + + + + + +
                                  .orElseThrow(
+ +56 + + + + + + +
                                      () ->
+ +57 + + +1 + +1. lambda$validate$1 : replaced return value with null for com/yubico/webauthn/TokenBindingValidator::lambda$validate$1 → KILLED
+ +
+
+
                                          new IllegalArgumentException(
+ +58 + + + + + + +
                                              "Property \"id\" missing from \"tokenBinding\" object."));
+ +59 + + + + + + +
                          }
+ +60 + + + + + + +
                          throw new RuntimeException(
+ +61 + + + + + + +
                              "Unknown token binding status: " + tbi.getStatus());
+ +62 + + + + + + +
                        })
+ +63 + + +2 + +1. lambda$validate$4 : replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$4 → SURVIVED
+2. lambda$validate$4 : replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$4 → SURVIVED
+ +
+
+
                    .orElseThrow(
+ +64 + + + + + + +
                        () ->
+ +65 + + +1 + +1. lambda$validate$3 : replaced return value with null for com/yubico/webauthn/TokenBindingValidator::lambda$validate$3 → KILLED
+ +
+
+
                            new IllegalArgumentException(
+ +66 + + + + + + +
                                "Token binding ID set by RP but not by client.")))
+ +67 + + + + + + +
        .orElseGet(
+ +68 + + + + + + +
            () ->
+ +69 + + + + + + +
                clientTokenBinding
+ +70 + + + + + + +
                    .map(
+ +71 + + + + + + +
                        tbi -> {
+ +72 + + + + + + +
                          switch (tbi.getStatus()) {
+ +73 + + + + + + +
                            case SUPPORTED:
+ +74 + + +1 + +1. lambda$validate$5 : replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$5 → SURVIVED
+ +
+
+
                              return true;
+ +75 + + + + + + +
+ +76 + + + + + + +
                            case PRESENT:
+ +77 + + + + + + +
                              throw new IllegalArgumentException(
+ +78 + + + + + + +
                                  "Token binding ID set by client but not by RP.");
+ +79 + + + + + + +
                          }
+ +80 + + + + + + +
                          throw new RuntimeException(
+ +81 + + + + + + +
                              "Unknown token binding status: " + tbi.getStatus());
+ +82 + + + + + + +
                        })
+ +83 + + +2 + +1. lambda$validate$6 : replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$6 → SURVIVED
+2. lambda$validate$6 : replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$6 → SURVIVED
+ +
+
+
                    .orElse(true));
+ +84 + + + + + + +
  }
+ +85 + + + + + + +
}

Mutations

35 + + + +

1.1
Location : validate
Killed by : none
replaced boolean return with false for com/yubico/webauthn/TokenBindingValidator::validate → SURVIVED

2.2
Location : validate
Killed by : none
replaced boolean return with true for com/yubico/webauthn/TokenBindingValidator::validate → SURVIVED

+
45 + + + +

1.1
Location : lambda$validate$2
Killed by : none
replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$2 → SURVIVED

2.2
Location : lambda$validate$2
Killed by : none
replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$2 → SURVIVED

+
48 + + + +

1.1
Location : lambda$validate$0
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
negated conditional → KILLED

+
49 + + + +

1.1
Location : lambda$validate$0
Killed by : none
replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$0 → SURVIVED

+
57 + + + +

1.1
Location : lambda$validate$1
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with null for com/yubico/webauthn/TokenBindingValidator::lambda$validate$1 → KILLED

+
63 + + + +

1.1
Location : lambda$validate$4
Killed by : none
replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$4 → SURVIVED

2.2
Location : lambda$validate$4
Killed by : none
replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$4 → SURVIVED

+
65 + + + +

1.1
Location : lambda$validate$3
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with null for com/yubico/webauthn/TokenBindingValidator::lambda$validate$3 → KILLED

+
74 + + + +

1.1
Location : lambda$validate$5
Killed by : none
replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$5 → SURVIVED

+
83 + + + +

1.1
Location : lambda$validate$6
Killed by : none
replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$6 → SURVIVED

2.2
Location : lambda$validate$6
Killed by : none
replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$6 → SURVIVED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/TpmAttestationStatementVerifier.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/TpmAttestationStatementVerifier.java.html new file mode 100644 index 000000000..cf772136e --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/TpmAttestationStatementVerifier.java.html @@ -0,0 +1,11296 @@ + + + + + + + + + +

TpmAttestationStatementVerifier.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import COSE.CoseException;
+ +28 + + + + + + +
import com.fasterxml.jackson.databind.JsonNode;
+ +29 + + + + + + +
import com.fasterxml.jackson.databind.node.ObjectNode;
+ +30 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +31 + + + + + + +
import com.yubico.internal.util.BinaryUtil;
+ +32 + + + + + + +
import com.yubico.internal.util.ByteInputStream;
+ +33 + + + + + + +
import com.yubico.internal.util.CertificateParser;
+ +34 + + + + + + +
import com.yubico.internal.util.ExceptionUtil;
+ +35 + + + + + + +
import com.yubico.webauthn.data.AttestationObject;
+ +36 + + + + + + +
import com.yubico.webauthn.data.AttestationType;
+ +37 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +38 + + + + + + +
import com.yubico.webauthn.data.COSEAlgorithmIdentifier;
+ +39 + + + + + + +
import java.io.IOException;
+ +40 + + + + + + +
import java.math.BigInteger;
+ +41 + + + + + + +
import java.security.KeyFactory;
+ +42 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +43 + + + + + + +
import java.security.PublicKey;
+ +44 + + + + + + +
import java.security.cert.CertificateException;
+ +45 + + + + + + +
import java.security.cert.CertificateParsingException;
+ +46 + + + + + + +
import java.security.cert.X509Certificate;
+ +47 + + + + + + +
import java.security.spec.InvalidKeySpecException;
+ +48 + + + + + + +
import java.security.spec.RSAPublicKeySpec;
+ +49 + + + + + + +
import java.util.Arrays;
+ +50 + + + + + + +
import java.util.List;
+ +51 + + + + + + +
import javax.naming.InvalidNameException;
+ +52 + + + + + + +
import javax.naming.ldap.LdapName;
+ +53 + + + + + + +
import javax.naming.ldap.Rdn;
+ +54 + + + + + + +
import lombok.Value;
+ +55 + + + + + + +
import lombok.extern.slf4j.Slf4j;
+ +56 + + + + + + +
+ +57 + + + + + + +
@Slf4j
+ +58 + + + + + + +
final class TpmAttestationStatementVerifier
+ +59 + + + + + + +
    implements AttestationStatementVerifier, X5cAttestationStatementVerifier {
+ +60 + + + + + + +
+ +61 + + + + + + +
  private static final String TPM_VER = "2.0";
+ +62 + + + + + + +
  static final ByteArray TPM_GENERATED_VALUE = ByteArray.fromBase64("/1RDRw==");
+ +63 + + + + + + +
  static final ByteArray TPM_ST_ATTEST_CERTIFY = ByteArray.fromBase64("gBc=");
+ +64 + + + + + + +
+ +65 + + + + + + +
  static final int TPM_ALG_NULL = 0x0010;
+ +66 + + + + + + +
+ +67 + + + + + + +
  private static final String OID_TCG_AT_TPM_MANUFACTURER = "2.23.133.2.1";
+ +68 + + + + + + +
  private static final String OID_TCG_AT_TPM_MODEL = "2.23.133.2.2";
+ +69 + + + + + + +
  private static final String OID_TCG_AT_TPM_VERSION = "2.23.133.2.3";
+ +70 + + + + + + +
+ +71 + + + + + + +
  /**
+ +72 + + + + + + +
   * Object attributes
+ +73 + + + + + + +
   *
+ +74 + + + + + + +
   * <p>see section 8.3 of
+ +75 + + + + + + +
   * https://www.trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-2-Structures-01.38.pdf
+ +76 + + + + + + +
   */
+ +77 + + + + + + +
  static final class Attributes {
+ +78 + + + + + + +
    static final int SIGN_ENCRYPT = 1 << 18;
+ +79 + + + + + + +
+ +80 + + + + + + +
    private static final int SHALL_BE_ZERO =
+ +81 + + + + + + +
        (1 << 0) // 0 Reserved
+ +82 + + + + + + +
            | (1 << 3) // 3 Reserved
+ +83 + + + + + + +
            | (0x3 << 8) // 9:8 Reserved
+ +84 + + + + + + +
            | (0xF << 12) // 15:12 Reserved
+ +85 + + + + + + +
            | ((0xFFFFFFFF << 19) & ((1 << 31) | ((1 << 31) - 1))) // 31:19 Reserved
+ +86 + + + + + + +
        ;
+ +87 + + + + + + +
  }
+ +88 + + + + + + +
+ +89 + + + + + + +
  @Override
+ +90 + + + + + + +
  public AttestationType getAttestationType(AttestationObject attestation) {
+ +91 + + +1 + +1. getAttestationType : replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::getAttestationType → KILLED
+ +
+
+
    return AttestationType.ATTESTATION_CA;
+ +92 + + + + + + +
  }
+ +93 + + + + + + +
+ +94 + + + + + + +
  @Override
+ +95 + + + + + + +
  public boolean verifyAttestationSignature(
+ +96 + + + + + + +
      AttestationObject attestationObject, ByteArray clientDataJsonHash) {
+ +97 + + + + + + +
+ +98 + + + + + + +
    // Step 1: Verify that attStmt is valid CBOR conforming to the syntax defined above and perform
+ +99 + + + + + + +
    // CBOR decoding on it to extract the contained fields.
+ +100 + + + + + + +
+ +101 + + + + + + +
    ObjectNode attStmt = attestationObject.getAttestationStatement();
+ +102 + + + + + + +
+ +103 + + + + + + +
    JsonNode verNode = attStmt.get("ver");
+ +104 + + +2 + +1. verifyAttestationSignature : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+2. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +105 + + +2 + +1. verifyAttestationSignature : negated conditional → KILLED
+2. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
        verNode != null && verNode.isTextual() && verNode.textValue().equals(TPM_VER),
+ +106 + + + + + + +
        "attStmt.ver must equal \"%s\", was: %s",
+ +107 + + + + + + +
        TPM_VER,
+ +108 + + + + + + +
        verNode);
+ +109 + + + + + + +
+ +110 + + + + + + +
    JsonNode algNode = attStmt.get("alg");
+ +111 + + +2 + +1. verifyAttestationSignature : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +112 + + +1 + +1. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
        algNode != null && algNode.canConvertToLong(),
+ +113 + + + + + + +
        "attStmt.alg must be set to an integer value, was: %s",
+ +114 + + + + + + +
        algNode);
+ +115 + + + + + + +
    final COSEAlgorithmIdentifier alg =
+ +116 + + + + + + +
        COSEAlgorithmIdentifier.fromId(algNode.longValue())
+ +117 + + + + + + +
            .orElseThrow(
+ +118 + + + + + + +
                () ->
+ +119 + + +1 + +1. lambda$verifyAttestationSignature$0 : replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::lambda$verifyAttestationSignature$0 → NO_COVERAGE
+ +
+
+
                    new IllegalArgumentException("Unknown COSE algorithm identifier: " + algNode));
+ +120 + + + + + + +
+ +121 + + + + + + +
    JsonNode x5cNode = attStmt.get("x5c");
+ +122 + + +2 + +1. verifyAttestationSignature : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +123 + + +1 + +1. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
        x5cNode != null && x5cNode.isArray(),
+ +124 + + + + + + +
        "attStmt.x5c must be set to an array value, was: %s",
+ +125 + + + + + + +
        x5cNode);
+ +126 + + + + + + +
    final List<X509Certificate> x5c;
+ +127 + + + + + + +
    try {
+ +128 + + + + + + +
      x5c =
+ +129 + + + + + + +
          getAttestationTrustPath(attestationObject)
+ +130 + + + + + + +
              .orElseThrow(
+ +131 + + + + + + +
                  () ->
+ +132 + + +1 + +1. lambda$verifyAttestationSignature$1 : replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::lambda$verifyAttestationSignature$1 → NO_COVERAGE
+ +
+
+
                      new IllegalArgumentException(
+ +133 + + + + + + +
                          "Failed to parse \"x5c\" attestation certificate chain in \"tpm\" attestation statement."));
+ +134 + + + + + + +
    } catch (CertificateException e) {
+ +135 + + + + + + +
      throw new RuntimeException(e);
+ +136 + + + + + + +
    }
+ +137 + + + + + + +
    final X509Certificate aikCert = x5c.get(0);
+ +138 + + + + + + +
+ +139 + + + + + + +
    JsonNode sigNode = attStmt.get("sig");
+ +140 + + +2 + +1. verifyAttestationSignature : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +141 + + +1 + +1. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
        sigNode != null && sigNode.isBinary(),
+ +142 + + + + + + +
        "attStmt.sig must be set to a binary value, was: %s",
+ +143 + + + + + + +
        sigNode);
+ +144 + + + + + + +
    final ByteArray sig;
+ +145 + + + + + + +
    try {
+ +146 + + + + + + +
      sig = new ByteArray(sigNode.binaryValue());
+ +147 + + + + + + +
    } catch (IOException e) {
+ +148 + + + + + + +
      throw new RuntimeException(e);
+ +149 + + + + + + +
    }
+ +150 + + + + + + +
+ +151 + + + + + + +
    JsonNode certInfoNode = attStmt.get("certInfo");
+ +152 + + +2 + +1. verifyAttestationSignature : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +153 + + +1 + +1. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
        certInfoNode != null && certInfoNode.isBinary(),
+ +154 + + + + + + +
        "attStmt.certInfo must be set to a binary value, was: %s",
+ +155 + + + + + + +
        certInfoNode);
+ +156 + + + + + + +
+ +157 + + + + + + +
    JsonNode pubAreaNode = attStmt.get("pubArea");
+ +158 + + +2 + +1. verifyAttestationSignature : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +159 + + +1 + +1. verifyAttestationSignature : negated conditional → KILLED
+ +
+
+
        pubAreaNode != null && pubAreaNode.isBinary(),
+ +160 + + + + + + +
        "attStmt.pubArea must be set to a binary value, was: %s",
+ +161 + + + + + + +
        pubAreaNode);
+ +162 + + + + + + +
+ +163 + + + + + + +
    final TpmtPublic pubArea;
+ +164 + + + + + + +
    try {
+ +165 + + + + + + +
      pubArea = TpmtPublic.parse(pubAreaNode.binaryValue());
+ +166 + + + + + + +
    } catch (IOException e) {
+ +167 + + + + + + +
      throw new RuntimeException("Failed to parse TPMT_PUBLIC data structure.", e);
+ +168 + + + + + + +
    }
+ +169 + + + + + + +
+ +170 + + + + + + +
    final TpmsAttest certInfo;
+ +171 + + + + + + +
    try {
+ +172 + + + + + + +
      certInfo = TpmsAttest.parse(certInfoNode.binaryValue());
+ +173 + + + + + + +
    } catch (IOException e) {
+ +174 + + + + + + +
      throw new RuntimeException("Failed to parse TPMS_ATTEST data structure.", e);
+ +175 + + + + + + +
    }
+ +176 + + + + + + +
+ +177 + + + + + + +
    // Step 2: Verify that the public key specified by the parameters and unique fields of pubArea
+ +178 + + + + + + +
    // is identical to the credentialPublicKey in the attestedCredentialData in authenticatorData.
+ +179 + + + + + + +
    try {
+ +180 + + +1 + +1. verifyAttestationSignature : removed call to com/yubico/webauthn/TpmAttestationStatementVerifier::verifyPublicKeysMatch → KILLED
+ +
+
+
      verifyPublicKeysMatch(attestationObject, pubArea);
+ +181 + + + + + + +
    } catch (CoseException | IOException | InvalidKeySpecException | NoSuchAlgorithmException e) {
+ +182 + + + + + + +
      throw new RuntimeException(
+ +183 + + + + + + +
          "Failed to verify that public key in TPM attestation matches public key in authData.", e);
+ +184 + + + + + + +
    }
+ +185 + + + + + + +
+ +186 + + + + + + +
    // Step 3: Concatenate authenticatorData and clientDataHash to form attToBeSigned.
+ +187 + + + + + + +
    final ByteArray attToBeSigned =
+ +188 + + + + + + +
        attestationObject.getAuthenticatorData().getBytes().concat(clientDataJsonHash);
+ +189 + + + + + + +
+ +190 + + + + + + +
    // Step 4: Validate that certInfo is valid:
+ +191 + + + + + + +
    try {
+ +192 + + +1 + +1. verifyAttestationSignature : removed call to com/yubico/webauthn/TpmAttestationStatementVerifier::validateCertInfo → KILLED
+ +
+
+
      validateCertInfo(alg, aikCert, sig, pubArea, certInfo, attToBeSigned, attestationObject);
+ +193 + + + + + + +
    } catch (CertificateParsingException e) {
+ +194 + + + + + + +
      throw new RuntimeException("Failed to verify TPM attestation.", e);
+ +195 + + + + + + +
    }
+ +196 + + + + + + +
+ +197 + + +1 + +1. verifyAttestationSignature : replaced boolean return with false for com/yubico/webauthn/TpmAttestationStatementVerifier::verifyAttestationSignature → KILLED
+ +
+
+
    return true;
+ +198 + + + + + + +
  }
+ +199 + + + + + + +
+ +200 + + + + + + +
  private void validateCertInfo(
+ +201 + + + + + + +
      COSEAlgorithmIdentifier alg,
+ +202 + + + + + + +
      X509Certificate aikCert,
+ +203 + + + + + + +
      ByteArray sig,
+ +204 + + + + + + +
      TpmtPublic pubArea,
+ +205 + + + + + + +
      TpmsAttest certInfo,
+ +206 + + + + + + +
      ByteArray attToBeSigned,
+ +207 + + + + + + +
      AttestationObject attestationObject)
+ +208 + + + + + + +
      throws CertificateParsingException {
+ +209 + + + + + + +
    // Sub-steps 1-2 handled in TpmsAttest.parse()
+ +210 + + + + + + +
    // Sub-step 3: Verify that extraData is set to the hash of attToBeSigned using the hash
+ +211 + + + + + + +
    // algorithm employed in "alg".
+ +212 + + + + + + +
    final ByteArray expectedExtraData;
+ +213 + + + + + + +
    switch (alg) {
+ +214 + + + + + + +
      case ES256:
+ +215 + + + + + + +
      case RS256:
+ +216 + + + + + + +
        expectedExtraData = Crypto.sha256(attToBeSigned);
+ +217 + + + + + + +
        break;
+ +218 + + + + + + +
+ +219 + + + + + + +
      case ES384:
+ +220 + + + + + + +
      case RS384:
+ +221 + + + + + + +
        expectedExtraData = Crypto.sha384(attToBeSigned);
+ +222 + + + + + + +
        break;
+ +223 + + + + + + +
+ +224 + + + + + + +
      case ES512:
+ +225 + + + + + + +
      case RS512:
+ +226 + + + + + + +
        expectedExtraData = Crypto.sha512(attToBeSigned);
+ +227 + + + + + + +
        break;
+ +228 + + + + + + +
+ +229 + + + + + + +
      case RS1:
+ +230 + + + + + + +
        try {
+ +231 + + + + + + +
          expectedExtraData = Crypto.sha1(attToBeSigned);
+ +232 + + + + + + +
        } catch (NoSuchAlgorithmException e) {
+ +233 + + + + + + +
          throw new RuntimeException("Failed to hash attToBeSigned to verify TPM attestation.", e);
+ +234 + + + + + + +
        }
+ +235 + + + + + + +
        break;
+ +236 + + + + + + +
+ +237 + + + + + + +
      default:
+ +238 + + + + + + +
        throw new UnsupportedOperationException("Signing algorithm not implemented: " + alg);
+ +239 + + + + + + +
    }
+ +240 + + +1 + +1. validateCertInfo : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +241 + + + + + + +
        certInfo.extraData.equals(expectedExtraData), "Incorrect certInfo.extraData.");
+ +242 + + + + + + +
+ +243 + + + + + + +
    // Sub-step 4: Verify that attested contains a TPMS_CERTIFY_INFO structure as specified in
+ +244 + + + + + + +
    // [TPMv2-Part2] section 10.12.3, whose name field contains a valid Name for pubArea, as
+ +245 + + + + + + +
    // computed using the algorithm in the nameAlg field of pubArea using the procedure specified in
+ +246 + + + + + + +
    // [TPMv2-Part1] section 16.
+ +247 + + +1 + +1. validateCertInfo : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +248 + + + + + + +
        certInfo.attestedName.equals(pubArea.name()), "Incorrect certInfo.attestedName.");
+ +249 + + + + + + +
+ +250 + + + + + + +
    // Sub-step 5 handled by parsing above
+ +251 + + + + + + +
    // Sub-step 6: Nothing to do
+ +252 + + + + + + +
+ +253 + + + + + + +
    // Sub-step 7: Verify the sig is a valid signature over certInfo using the attestation public
+ +254 + + + + + + +
    // key in aikCert with the algorithm specified in alg.
+ +255 + + +1 + +1. validateCertInfo : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +256 + + + + + + +
        Crypto.verifySignature(aikCert, certInfo.getRawBytes(), sig, alg),
+ +257 + + + + + + +
        "Incorrect TPM attestation signature.");
+ +258 + + + + + + +
+ +259 + + + + + + +
    // Sub-step 8: Verify that aikCert meets the requirements in § 8.3.1 TPM Attestation Statement
+ +260 + + + + + + +
    // Certificate Requirements.
+ +261 + + + + + + +
    // Sub-step 9: If aikCert contains an extension with OID 1.3.6.1.4.1.45724.1.1.4
+ +262 + + + + + + +
    // (id-fido-gen-ce-aaguid) verify that the value of this extension matches the aaguid in
+ +263 + + + + + + +
    // authenticatorData.
+ +264 + + +1 + +1. validateCertInfo : removed call to com/yubico/webauthn/TpmAttestationStatementVerifier::verifyX5cRequirements → KILLED
+ +
+
+
    verifyX5cRequirements(
+ +265 + + + + + + +
        aikCert,
+ +266 + + + + + + +
        attestationObject.getAuthenticatorData().getAttestedCredentialData().get().getAaguid());
+ +267 + + + + + + +
  }
+ +268 + + + + + + +
+ +269 + + + + + + +
  private void verifyPublicKeysMatch(AttestationObject attestationObject, TpmtPublic pubArea)
+ +270 + + + + + + +
      throws CoseException, IOException, InvalidKeySpecException, NoSuchAlgorithmException {
+ +271 + + + + + + +
    final PublicKey credentialPubKey =
+ +272 + + + + + + +
        WebAuthnCodecs.importCosePublicKey(
+ +273 + + + + + + +
            attestationObject
+ +274 + + + + + + +
                .getAuthenticatorData()
+ +275 + + + + + + +
                .getAttestedCredentialData()
+ +276 + + + + + + +
                .get()
+ +277 + + + + + + +
                .getCredentialPublicKey());
+ +278 + + + + + + +
+ +279 + + + + + + +
    final PublicKey signedCredentialPublicKey;
+ +280 + + + + + + +
    switch (pubArea.signAlg) {
+ +281 + + + + + + +
      case TpmAlgAsym.RSA:
+ +282 + + + + + + +
        {
+ +283 + + + + + + +
          TpmsRsaParms params = (TpmsRsaParms) pubArea.parameters;
+ +284 + + + + + + +
          Tpm2bPublicKeyRsa unique = (Tpm2bPublicKeyRsa) pubArea.unique;
+ +285 + + + + + + +
          RSAPublicKeySpec spec =
+ +286 + + + + + + +
              new RSAPublicKeySpec(
+ +287 + + + + + + +
                  new BigInteger(1, unique.bytes.getBytes()), BigInteger.valueOf(params.exponent));
+ +288 + + + + + + +
          KeyFactory kf = KeyFactory.getInstance("RSA");
+ +289 + + + + + + +
          signedCredentialPublicKey = kf.generatePublic(spec);
+ +290 + + + + + + +
        }
+ +291 + + + + + + +
+ +292 + + +1 + +1. verifyPublicKeysMatch : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
        ExceptionUtil.assertTrue(
+ +293 + + + + + + +
            Arrays.equals(credentialPubKey.getEncoded(), signedCredentialPublicKey.getEncoded()),
+ +294 + + + + + + +
            "Signed public key in TPM attestation is not identical to credential public key in authData.");
+ +295 + + + + + + +
        break;
+ +296 + + + + + + +
+ +297 + + + + + + +
      case TpmAlgAsym.ECC:
+ +298 + + + + + + +
        {
+ +299 + + + + + + +
          TpmsEccParms params = (TpmsEccParms) pubArea.parameters;
+ +300 + + + + + + +
          TpmsEccPoint unique = (TpmsEccPoint) pubArea.unique;
+ +301 + + + + + + +
+ +302 + + + + + + +
          final COSEAlgorithmIdentifier algId =
+ +303 + + + + + + +
              COSEAlgorithmIdentifier.fromPublicKey(
+ +304 + + + + + + +
                      attestationObject
+ +305 + + + + + + +
                          .getAuthenticatorData()
+ +306 + + + + + + +
                          .getAttestedCredentialData()
+ +307 + + + + + + +
                          .get()
+ +308 + + + + + + +
                          .getCredentialPublicKey())
+ +309 + + + + + + +
                  .get();
+ +310 + + + + + + +
          final COSEAlgorithmIdentifier tpmAlgId;
+ +311 + + + + + + +
          final CBORObject cosePubkey =
+ +312 + + + + + + +
              CBORObject.DecodeFromBytes(
+ +313 + + + + + + +
                  attestationObject
+ +314 + + + + + + +
                      .getAuthenticatorData()
+ +315 + + + + + + +
                      .getAttestedCredentialData()
+ +316 + + + + + + +
                      .get()
+ +317 + + + + + + +
                      .getCredentialPublicKey()
+ +318 + + + + + + +
                      .getBytes());
+ +319 + + + + + + +
+ +320 + + + + + + +
          switch (params.curve_id) {
+ +321 + + + + + + +
            case TpmEccCurve.NIST_P256:
+ +322 + + + + + + +
              tpmAlgId = COSEAlgorithmIdentifier.ES256;
+ +323 + + + + + + +
              break;
+ +324 + + + + + + +
+ +325 + + + + + + +
            case TpmEccCurve.NIST_P384:
+ +326 + + + + + + +
              tpmAlgId = COSEAlgorithmIdentifier.ES384;
+ +327 + + + + + + +
              break;
+ +328 + + + + + + +
+ +329 + + + + + + +
            case TpmEccCurve.NIST_P521:
+ +330 + + + + + + +
              tpmAlgId = COSEAlgorithmIdentifier.ES512;
+ +331 + + + + + + +
              break;
+ +332 + + + + + + +
+ +333 + + + + + + +
            default:
+ +334 + + + + + + +
              throw new UnsupportedOperationException(
+ +335 + + + + + + +
                  "Unsupported elliptic curve: " + params.curve_id);
+ +336 + + + + + + +
          }
+ +337 + + + + + + +
+ +338 + + +1 + +1. verifyPublicKeysMatch : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
          ExceptionUtil.assertTrue(
+ +339 + + + + + + +
              algId.equals(tpmAlgId),
+ +340 + + + + + + +
              "Signed public key in TPM attestation is not identical to credential public key in authData; elliptic curve differs: %s != %s",
+ +341 + + + + + + +
              tpmAlgId,
+ +342 + + + + + + +
              algId);
+ +343 + + + + + + +
          byte[] cosePubkeyX = cosePubkey.get(CBORObject.FromObject(-2)).GetByteString();
+ +344 + + + + + + +
          byte[] cosePubkeyY = cosePubkey.get(CBORObject.FromObject(-3)).GetByteString();
+ +345 + + +1 + +1. verifyPublicKeysMatch : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
          ExceptionUtil.assertTrue(
+ +346 + + + + + + +
              new BigInteger(1, unique.x.getBytes()).equals(new BigInteger(1, cosePubkeyX)),
+ +347 + + + + + + +
              "Signed public key in TPM attestation is not identical to credential public key in authData; EC X coordinate differs: %s != %s",
+ +348 + + + + + + +
              unique.x,
+ +349 + + + + + + +
              new ByteArray(cosePubkeyX));
+ +350 + + +1 + +1. verifyPublicKeysMatch : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
          ExceptionUtil.assertTrue(
+ +351 + + + + + + +
              new BigInteger(1, unique.y.getBytes()).equals(new BigInteger(1, cosePubkeyY)),
+ +352 + + + + + + +
              "Signed public key in TPM attestation is not identical to credential public key in authData; EC Y coordinate differs: %s != %s",
+ +353 + + + + + + +
              unique.y,
+ +354 + + + + + + +
              new ByteArray(cosePubkeyY));
+ +355 + + + + + + +
        }
+ +356 + + + + + + +
        break;
+ +357 + + + + + + +
+ +358 + + + + + + +
      default:
+ +359 + + + + + + +
        throw new UnsupportedOperationException(
+ +360 + + + + + + +
            "Unsupported algorithm for credential public key: " + pubArea.signAlg);
+ +361 + + + + + + +
    }
+ +362 + + + + + + +
  }
+ +363 + + + + + + +
+ +364 + + + + + + +
  static final class TpmAlgAsym {
+ +365 + + + + + + +
    static final int RSA = 0x0001;
+ +366 + + + + + + +
    static final int ECC = 0x0023;
+ +367 + + + + + + +
  }
+ +368 + + + + + + +
+ +369 + + + + + + +
  private interface Parameters {}
+ +370 + + + + + + +
+ +371 + + + + + + +
  private interface Unique {}
+ +372 + + + + + + +
+ +373 + + + + + + +
  @Value
+ +374 + + + + + + +
  private static class TpmtPublic {
+ +375 + + + + + + +
    int signAlg;
+ +376 + + + + + + +
    int nameAlg;
+ +377 + + + + + + +
    Parameters parameters;
+ +378 + + + + + + +
    Unique unique;
+ +379 + + + + + + +
    ByteArray rawBytes;
+ +380 + + + + + + +
+ +381 + + + + + + +
    private static TpmtPublic parse(byte[] pubArea) throws IOException {
+ +382 + + + + + + +
      try (ByteInputStream reader = new ByteInputStream(pubArea)) {
+ +383 + + + + + + +
        final int signAlg = reader.readUnsignedShort();
+ +384 + + + + + + +
        final int nameAlg = reader.readUnsignedShort();
+ +385 + + + + + + +
+ +386 + + + + + + +
        final int attributes = reader.readInt();
+ +387 + + +3 + +1. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. parse : negated conditional → KILLED
+3. parse : Replaced bitwise AND with OR → KILLED
+ +
+
+
        ExceptionUtil.assertTrue(
+ +388 + + + + + + +
            (attributes & Attributes.SHALL_BE_ZERO) == 0,
+ +389 + + + + + + +
            "Attributes contains 1 bits in reserved position(s): 0x%08x",
+ +390 + + + + + + +
            attributes);
+ +391 + + + + + + +
+ +392 + + + + + + +
        // authPolicy is not used by this implementation
+ +393 + + + + + + +
        reader.skipBytes(reader.readUnsignedShort());
+ +394 + + + + + + +
+ +395 + + + + + + +
        final Parameters parameters;
+ +396 + + + + + + +
        final Unique unique;
+ +397 + + + + + + +
+ +398 + + +3 + +1. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+2. parse : negated conditional → KILLED
+3. parse : Replaced bitwise AND with OR → KILLED
+ +
+
+
        ExceptionUtil.assertTrue(
+ +399 + + + + + + +
            (attributes & Attributes.SIGN_ENCRYPT) == Attributes.SIGN_ENCRYPT,
+ +400 + + + + + + +
            "Public key is expected to have the SIGN_ENCRYPT attribute set, attributes were: 0x%08x",
+ +401 + + + + + + +
            attributes);
+ +402 + + + + + + +
+ +403 + + +1 + +1. parse : negated conditional → KILLED
+ +
+
+
        if (signAlg == TpmAlgAsym.RSA) {
+ +404 + + + + + + +
          parameters = TpmsRsaParms.parse(reader);
+ +405 + + + + + + +
          unique = Tpm2bPublicKeyRsa.parse(reader);
+ +406 + + +1 + +1. parse : negated conditional → KILLED
+ +
+
+
        } else if (signAlg == TpmAlgAsym.ECC) {
+ +407 + + + + + + +
          parameters = TpmsEccParms.parse(reader);
+ +408 + + + + + + +
          unique = TpmsEccPoint.parse(reader);
+ +409 + + + + + + +
        } else {
+ +410 + + + + + + +
          throw new UnsupportedOperationException("Signing algorithm not implemented: " + signAlg);
+ +411 + + + + + + +
        }
+ +412 + + + + + + +
+ +413 + + +1 + +1. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+ +
+
+
        ExceptionUtil.assertTrue(
+ +414 + + +1 + +1. parse : negated conditional → KILLED
+ +
+
+
            reader.available() == 0,
+ +415 + + + + + + +
            "%d remaining bytes in TPMT_PUBLIC buffer",
+ +416 + + + + + + +
            reader.available());
+ +417 + + + + + + +
+ +418 + + + + + + +
        return new TpmtPublic(signAlg, nameAlg, parameters, unique, new ByteArray(pubArea));
+ +419 + + + + + + +
      }
+ +420 + + + + + + +
    }
+ +421 + + + + + + +
+ +422 + + + + + + +
    /**
+ +423 + + + + + + +
     * Computing Entity Names
+ +424 + + + + + + +
     *
+ +425 + + + + + + +
     * <p>see:
+ +426 + + + + + + +
     * https://www.trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-1-Architecture-01.38.pdf
+ +427 + + + + + + +
     * section 16 Names
+ +428 + + + + + + +
     *
+ +429 + + + + + + +
     * <pre>
+ +430 + + + + + + +
     * Name ≔ nameAlg || HnameAlg (handle→nvPublicArea)
+ +431 + + + + + + +
     * where
+ +432 + + + + + + +
     * nameAlg algorithm used to compute Name
+ +433 + + + + + + +
     * HnameAlg hash using the nameAlg parameter in the NV Index location
+ +434 + + + + + + +
     * associated with handle
+ +435 + + + + + + +
     * nvPublicArea contents of the TPMS_NV_PUBLIC associated with handle
+ +436 + + + + + + +
     * </pre>
+ +437 + + + + + + +
     */
+ +438 + + + + + + +
    private ByteArray name() {
+ +439 + + + + + + +
      final ByteArray hash;
+ +440 + + + + + + +
      switch (this.nameAlg) {
+ +441 + + + + + + +
        case TpmAlgHash.SHA1:
+ +442 + + + + + + +
          try {
+ +443 + + + + + + +
            hash = Crypto.sha1(this.rawBytes);
+ +444 + + + + + + +
          } catch (NoSuchAlgorithmException e) {
+ +445 + + + + + + +
            throw new RuntimeException("Failed to hash TPMU_ATTEST name.", e);
+ +446 + + + + + + +
          }
+ +447 + + + + + + +
          break;
+ +448 + + + + + + +
+ +449 + + + + + + +
        case TpmAlgHash.SHA256:
+ +450 + + + + + + +
          hash = Crypto.sha256(this.rawBytes);
+ +451 + + + + + + +
          break;
+ +452 + + + + + + +
+ +453 + + + + + + +
        case TpmAlgHash.SHA384:
+ +454 + + + + + + +
          hash = Crypto.sha384(this.rawBytes);
+ +455 + + + + + + +
          break;
+ +456 + + + + + + +
+ +457 + + + + + + +
        case TpmAlgHash.SHA512:
+ +458 + + + + + + +
          hash = Crypto.sha512(this.rawBytes);
+ +459 + + + + + + +
          break;
+ +460 + + + + + + +
+ +461 + + + + + + +
        default:
+ +462 + + + + + + +
          throw new IllegalArgumentException("Unknown hash algorithm identifier: " + this.nameAlg);
+ +463 + + + + + + +
      }
+ +464 + + +1 + +1. name : replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic::name → KILLED
+ +
+
+
      return new ByteArray(BinaryUtil.encodeUint16(this.nameAlg)).concat(hash);
+ +465 + + + + + + +
    }
+ +466 + + + + + + +
  }
+ +467 + + + + + + +
+ +468 + + + + + + +
  static class TpmAlgHash {
+ +469 + + + + + + +
    static final int SHA1 = 0x0004;
+ +470 + + + + + + +
    static final int SHA256 = 0x000B;
+ +471 + + + + + + +
    static final int SHA384 = 0x000C;
+ +472 + + + + + + +
    static final int SHA512 = 0x000D;
+ +473 + + + + + + +
  }
+ +474 + + + + + + +
+ +475 + + + + + + +
  private void verifyX5cRequirements(X509Certificate cert, ByteArray aaguid)
+ +476 + + + + + + +
      throws CertificateParsingException {
+ +477 + + +1 + +1. verifyX5cRequirements : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +478 + + +1 + +1. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
        cert.getVersion() == 3,
+ +479 + + + + + + +
        "Invalid TPM attestation certificate: Version MUST be 3, but was: %s",
+ +480 + + + + + + +
        cert.getVersion());
+ +481 + + + + + + +
+ +482 + + +1 + +1. verifyX5cRequirements : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +483 + + + + + + +
        cert.getSubjectX500Principal().getName().isEmpty(),
+ +484 + + + + + + +
        "Invalid TPM attestation certificate: subject MUST be empty, but was: %s",
+ +485 + + + + + + +
        cert.getSubjectX500Principal());
+ +486 + + + + + + +
+ +487 + + + + + + +
    boolean foundManufacturer = false;
+ +488 + + + + + + +
    boolean foundModel = false;
+ +489 + + + + + + +
    boolean foundVersion = false;
+ +490 + + + + + + +
    for (List<?> n : cert.getSubjectAlternativeNames()) {
+ +491 + + +1 + +1. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
      if ((Integer) n.get(0) == 4) { // GeneralNames CHOICE 4: directoryName
+ +492 + + +1 + +1. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
        if (n.get(1) instanceof String) {
+ +493 + + + + + + +
          try {
+ +494 + + + + + + +
            for (final Rdn rdn : new LdapName((String) n.get(1)).getRdns()) {
+ +495 + + + + + + +
              javax.naming.directory.Attributes attrs = rdn.toAttributes();
+ +496 + + +1 + +1. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
              foundManufacturer =
+ +497 + + +1 + +1. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
                  foundManufacturer || attrs.get(OID_TCG_AT_TPM_MANUFACTURER) != null;
+ +498 + + +2 + +1. verifyX5cRequirements : negated conditional → KILLED
+2. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
              foundModel = foundModel || attrs.get(OID_TCG_AT_TPM_MODEL) != null;
+ +499 + + +2 + +1. verifyX5cRequirements : negated conditional → KILLED
+2. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
              foundVersion = foundVersion || attrs.get(OID_TCG_AT_TPM_VERSION) != null;
+ +500 + + + + + + +
            }
+ +501 + + + + + + +
          } catch (InvalidNameException e) {
+ +502 + + + + + + +
            throw new RuntimeException(
+ +503 + + + + + + +
                "Failed to decode subject alternative name in TPM attestation cert", e);
+ +504 + + + + + + +
          }
+ +505 + + + + + + +
        } else {
+ +506 + + + + + + +
          log.debug("Unknown type of SubjectAlternativeNames entry: {}", n.get(1));
+ +507 + + + + + + +
        }
+ +508 + + + + + + +
      }
+ +509 + + + + + + +
    }
+ +510 + + +4 + +1. verifyX5cRequirements : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+2. verifyX5cRequirements : negated conditional → KILLED
+3. verifyX5cRequirements : negated conditional → KILLED
+4. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +511 + + + + + + +
        foundManufacturer && foundModel && foundVersion,
+ +512 + + + + + + +
        "Invalid TPM attestation certificate: The Subject Alternative Name extension MUST be set as defined in [TPMv2-EK-Profile] section 3.2.9.%s%s%s",
+ +513 + + +1 + +1. verifyX5cRequirements : negated conditional → SURVIVED
+ +
+
+
        foundManufacturer ? "" : " Missing TPM manufacturer.",
+ +514 + + +1 + +1. verifyX5cRequirements : negated conditional → SURVIVED
+ +
+
+
        foundModel ? "" : " Missing TPM model.",
+ +515 + + +1 + +1. verifyX5cRequirements : negated conditional → SURVIVED
+ +
+
+
        foundVersion ? "" : " Missing TPM version.");
+ +516 + + + + + + +
+ +517 + + +1 + +1. verifyX5cRequirements : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +518 + + +2 + +1. verifyX5cRequirements : negated conditional → KILLED
+2. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
        cert.getExtendedKeyUsage() != null && cert.getExtendedKeyUsage().contains("2.23.133.8.3"),
+ +519 + + + + + + +
        "Invalid TPM attestation certificate: extended key usage extension MUST contain the OID 2.23.133.8.3, but was: %s",
+ +520 + + + + + + +
        cert.getExtendedKeyUsage());
+ +521 + + + + + + +
+ +522 + + +1 + +1. verifyX5cRequirements : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +523 + + +1 + +1. verifyX5cRequirements : negated conditional → KILLED
+ +
+
+
        cert.getBasicConstraints() == -1,
+ +524 + + + + + + +
        "Invalid TPM attestation certificate: MUST NOT be a CA certificate, but was.");
+ +525 + + + + + + +
+ +526 + + + + + + +
    CertificateParser.parseFidoAaguidExtension(cert)
+ +527 + + +1 + +1. verifyX5cRequirements : removed call to java/util/Optional::ifPresent → KILLED
+ +
+
+
        .ifPresent(
+ +528 + + + + + + +
            extensionAaguid -> {
+ +529 + + +1 + +1. lambda$verifyX5cRequirements$2 : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
              ExceptionUtil.assertTrue(
+ +530 + + + + + + +
                  Arrays.equals(aaguid.getBytes(), extensionAaguid),
+ +531 + + + + + + +
                  "Invalid TPM attestation certificate: X.509 extension \"id-fido-gen-ce-aaguid\" is present but does not match the authenticator AAGUID.");
+ +532 + + + + + + +
            });
+ +533 + + + + + + +
  }
+ +534 + + + + + + +
+ +535 + + + + + + +
  static final class TpmRsaScheme {
+ +536 + + + + + + +
    static final int RSASSA = 0x0014;
+ +537 + + + + + + +
  }
+ +538 + + + + + + +
+ +539 + + + + + + +
  /**
+ +540 + + + + + + +
   * See:
+ +541 + + + + + + +
   * https://www.trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-2-Structures-01.38.pdf
+ +542 + + + + + + +
   * section 12.2.3.5
+ +543 + + + + + + +
   */
+ +544 + + + + + + +
  @Value
+ +545 + + + + + + +
  private static class TpmsRsaParms implements Parameters {
+ +546 + + + + + + +
+ +547 + + + + + + +
    long exponent;
+ +548 + + + + + + +
+ +549 + + + + + + +
    private static TpmsRsaParms parse(ByteInputStream reader) throws IOException {
+ +550 + + + + + + +
      final int symmetric = reader.readUnsignedShort();
+ +551 + + +2 + +1. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+2. parse : negated conditional → KILLED
+ +
+
+
      ExceptionUtil.assertTrue(
+ +552 + + + + + + +
          symmetric == TPM_ALG_NULL,
+ +553 + + + + + + +
          "RSA key is expected to have \"symmetric\" set to TPM_ALG_NULL, was: 0x%04x",
+ +554 + + + + + + +
          symmetric);
+ +555 + + + + + + +
+ +556 + + + + + + +
      final int scheme = reader.readUnsignedShort();
+ +557 + + +3 + +1. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+2. parse : negated conditional → KILLED
+3. parse : negated conditional → KILLED
+ +
+
+
      ExceptionUtil.assertTrue(
+ +558 + + + + + + +
          scheme == TpmRsaScheme.RSASSA || scheme == TPM_ALG_NULL,
+ +559 + + + + + + +
          "RSA key is expected to have \"scheme\" set to TPM_ALG_RSASSA or TPM_ALG_NULL, was: 0x%04x",
+ +560 + + + + + + +
          scheme);
+ +561 + + + + + + +
+ +562 + + + + + + +
      reader.skipBytes(2); // key_bits is not used by this implementation
+ +563 + + + + + + +
+ +564 + + + + + + +
      int exponent = reader.readInt();
+ +565 + + +3 + +1. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED
+2. parse : changed conditional boundary → KILLED
+3. parse : negated conditional → KILLED
+ +
+
+
      ExceptionUtil.assertTrue(
+ +566 + + + + + + +
          exponent >= 0, "Exponent is too large and wrapped around to negative: %d", exponent);
+ +567 + + +1 + +1. parse : negated conditional → KILLED
+ +
+
+
      if (exponent == 0) {
+ +568 + + + + + + +
        // When zero,  indicates  that  the  exponent  is  the  default  of 2^16 + 1
+ +569 + + + + + + +
        exponent = (1 << 16) + 1;
+ +570 + + + + + + +
      }
+ +571 + + + + + + +
+ +572 + + +1 + +1. parse : replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms::parse → KILLED
+ +
+
+
      return new TpmsRsaParms(exponent);
+ +573 + + + + + + +
    }
+ +574 + + + + + + +
  }
+ +575 + + + + + + +
+ +576 + + + + + + +
  @Value
+ +577 + + + + + + +
  private static class Tpm2bPublicKeyRsa implements Unique {
+ +578 + + + + + + +
    ByteArray bytes;
+ +579 + + + + + + +
+ +580 + + + + + + +
    private static Tpm2bPublicKeyRsa parse(ByteInputStream reader) throws IOException {
+ +581 + + +1 + +1. parse : replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$Tpm2bPublicKeyRsa::parse → KILLED
+ +
+
+
      return new Tpm2bPublicKeyRsa(new ByteArray(reader.read(reader.readUnsignedShort())));
+ +582 + + + + + + +
    }
+ +583 + + + + + + +
  }
+ +584 + + + + + + +
+ +585 + + + + + + +
  @Value
+ +586 + + + + + + +
  private static class TpmsEccParms implements Parameters {
+ +587 + + + + + + +
    int curve_id;
+ +588 + + + + + + +
+ +589 + + + + + + +
    private static TpmsEccParms parse(ByteInputStream reader) throws IOException {
+ +590 + + + + + + +
      final int symmetric = reader.readUnsignedShort();
+ +591 + + + + + + +
      final int scheme = reader.readUnsignedShort();
+ +592 + + +2 + +1. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+2. parse : negated conditional → KILLED
+ +
+
+
      ExceptionUtil.assertTrue(
+ +593 + + + + + + +
          symmetric == TPM_ALG_NULL,
+ +594 + + + + + + +
          "ECC key is expected to have \"symmetric\" set to TPM_ALG_NULL, was: 0x%04x",
+ +595 + + + + + + +
          symmetric);
+ +596 + + +2 + +1. parse : negated conditional → KILLED
+2. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
      ExceptionUtil.assertTrue(
+ +597 + + + + + + +
          scheme == TPM_ALG_NULL,
+ +598 + + + + + + +
          "ECC key is expected to have \"scheme\" set to TPM_ALG_NULL, was: 0x%04x",
+ +599 + + + + + + +
          scheme);
+ +600 + + + + + + +
+ +601 + + + + + + +
      final int curve_id = reader.readUnsignedShort();
+ +602 + + + + + + +
      reader.skipBytes(2); // kdf_scheme is not used by this implementation
+ +603 + + + + + + +
+ +604 + + +1 + +1. parse : replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms::parse → KILLED
+ +
+
+
      return new TpmsEccParms(curve_id);
+ +605 + + + + + + +
    }
+ +606 + + + + + + +
  }
+ +607 + + + + + + +
+ +608 + + + + + + +
  /**
+ +609 + + + + + + +
   * TPMS_ECC_POINT
+ +610 + + + + + + +
   *
+ +611 + + + + + + +
   * <p>See
+ +612 + + + + + + +
   * https://www.trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-2-Structures-01.38.pdf
+ +613 + + + + + + +
   * Section 11.2.5.2
+ +614 + + + + + + +
   */
+ +615 + + + + + + +
  @Value
+ +616 + + + + + + +
  private static class TpmsEccPoint implements Unique {
+ +617 + + + + + + +
+ +618 + + + + + + +
    ByteArray x;
+ +619 + + + + + + +
    ByteArray y;
+ +620 + + + + + + +
+ +621 + + + + + + +
    private static TpmsEccPoint parse(ByteInputStream reader) throws IOException {
+ +622 + + + + + + +
      final ByteArray x = new ByteArray(reader.read(reader.readUnsignedShort()));
+ +623 + + + + + + +
      final ByteArray y = new ByteArray(reader.read(reader.readUnsignedShort()));
+ +624 + + + + + + +
+ +625 + + +1 + +1. parse : replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccPoint::parse → KILLED
+ +
+
+
      return new TpmsEccPoint(x, y);
+ +626 + + + + + + +
    }
+ +627 + + + + + + +
  }
+ +628 + + + + + + +
+ +629 + + + + + + +
  /**
+ +630 + + + + + + +
   * TPM_ECC_CURVE
+ +631 + + + + + + +
   *
+ +632 + + + + + + +
   * <p>https://www.trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-2-Structures-01.38.pdf
+ +633 + + + + + + +
   * section 6.4
+ +634 + + + + + + +
   */
+ +635 + + + + + + +
  private static class TpmEccCurve {
+ +636 + + + + + + +
+ +637 + + + + + + +
    private static final int NONE = 0x0000;
+ +638 + + + + + + +
    private static final int NIST_P256 = 0x0003;
+ +639 + + + + + + +
    private static final int NIST_P384 = 0x0004;
+ +640 + + + + + + +
    private static final int NIST_P521 = 0x0005;
+ +641 + + + + + + +
  }
+ +642 + + + + + + +
+ +643 + + + + + + +
  /**
+ +644 + + + + + + +
   * the signature data is defined by [TPMv2-Part2] Section 10.12.8 (TPMS_ATTEST) as:
+ +645 + + + + + + +
   * TPM_GENERATED_VALUE (0xff544347 aka "\xffTCG") TPMI_ST_ATTEST - always TPM_ST_ATTEST_CERTIFY
+ +646 + + + + + + +
   * (0x8017) because signing procedure defines it should call TPM_Certify [TPMv2-Part3] Section
+ +647 + + + + + + +
   * 18.2 TPM2B_NAME size (uint16) name (size long) TPM2B_DATA size (uint16) name (size long)
+ +648 + + + + + + +
   * TPMS_CLOCK_INFO clock (uint64) resetCount (uint32) restartCount (uint32) safe (byte) 1 yes, 0
+ +649 + + + + + + +
   * no firmwareVersion uint64 attested TPMS_CERTIFY_INFO (because TPM_ST_ATTEST_CERTIFY) name
+ +650 + + + + + + +
   * TPM2B_NAME qualified_name TPM2B_NAME See:
+ +651 + + + + + + +
   * https://www.trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-2-Structures-01.38.pdf
+ +652 + + + + + + +
   * https://www.trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-3-Commands-01.38.pdf
+ +653 + + + + + + +
   */
+ +654 + + + + + + +
  @Value
+ +655 + + + + + + +
  private static class TpmsAttest {
+ +656 + + + + + + +
+ +657 + + + + + + +
    ByteArray rawBytes;
+ +658 + + + + + + +
    ByteArray extraData;
+ +659 + + + + + + +
    ByteArray attestedName;
+ +660 + + + + + + +
+ +661 + + + + + + +
    private static TpmsAttest parse(byte[] certInfo) throws IOException {
+ +662 + + + + + + +
      try (ByteInputStream reader = new ByteInputStream(certInfo)) {
+ +663 + + + + + + +
        final ByteArray magic = new ByteArray(reader.read(4));
+ +664 + + + + + + +
+ +665 + + + + + + +
        // Verify that magic is set to TPM_GENERATED_VALUE.
+ +666 + + + + + + +
        // see https://w3c.github.io/webauthn/#sctn-tpm-attestation
+ +667 + + + + + + +
        // verification procedure
+ +668 + + +1 + +1. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
        ExceptionUtil.assertTrue(
+ +669 + + + + + + +
            magic.equals(TPM_GENERATED_VALUE), "magic field is invalid: %s", magic);
+ +670 + + + + + + +
+ +671 + + + + + + +
        // Verify that type is set to TPM_ST_ATTEST_CERTIFY.
+ +672 + + + + + + +
        // see https://w3c.github.io/webauthn/#sctn-tpm-attestation
+ +673 + + + + + + +
        // verification procedure
+ +674 + + + + + + +
        final ByteArray type = new ByteArray(reader.read(2));
+ +675 + + +1 + +1. parse : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+ +
+
+
        ExceptionUtil.assertTrue(
+ +676 + + + + + + +
            type.equals(TPM_ST_ATTEST_CERTIFY), "type field is invalid: %s", type);
+ +677 + + + + + + +
+ +678 + + + + + + +
        // qualifiedSigner is not used by this implementation
+ +679 + + + + + + +
        reader.skipBytes(reader.readUnsignedShort());
+ +680 + + + + + + +
+ +681 + + + + + + +
        final ByteArray extraData = new ByteArray(reader.read(reader.readUnsignedShort()));
+ +682 + + + + + + +
+ +683 + + + + + + +
        // clockInfo is not used by this implementation
+ +684 + + + + + + +
        reader.skipBytes(8 + 4 + 4 + 1);
+ +685 + + + + + + +
+ +686 + + + + + + +
        // firmwareVersion is not used by this implementation
+ +687 + + + + + + +
        reader.skipBytes(8);
+ +688 + + + + + + +
+ +689 + + + + + + +
        final ByteArray attestedName = new ByteArray(reader.read(reader.readUnsignedShort()));
+ +690 + + + + + + +
+ +691 + + + + + + +
        // attestedQualifiedName is not used by this implementation
+ +692 + + + + + + +
+ +693 + + + + + + +
        return new TpmsAttest(new ByteArray(certInfo), extraData, attestedName);
+ +694 + + + + + + +
      }
+ +695 + + + + + + +
    }
+ +696 + + + + + + +
  }
+ +697 + + + + + + +
}

Mutations

91 + + + +

1.1
Location : getAttestationType
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::getAttestationType → KILLED

+
104 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
105 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
111 + + + +

1.1
Location : verifyAttestationSignature
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
112 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
119 + + + +

1.1
Location : lambda$verifyAttestationSignature$0
Killed by : none
replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::lambda$verifyAttestationSignature$0 → NO_COVERAGE

+
122 + + + +

1.1
Location : verifyAttestationSignature
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
123 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
132 + + + +

1.1
Location : lambda$verifyAttestationSignature$1
Killed by : none
replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::lambda$verifyAttestationSignature$1 → NO_COVERAGE

+
140 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : verifyAttestationSignature
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
141 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
152 + + + +

1.1
Location : verifyAttestationSignature
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
153 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
158 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : verifyAttestationSignature
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
159 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
180 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/webauthn/TpmAttestationStatementVerifier::verifyPublicKeysMatch → KILLED

+
192 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/webauthn/TpmAttestationStatementVerifier::validateCertInfo → KILLED

+
197 + + + +

1.1
Location : verifyAttestationSignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with false for com/yubico/webauthn/TpmAttestationStatementVerifier::verifyAttestationSignature → KILLED

+
240 + + + +

1.1
Location : validateCertInfo
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
247 + + + +

1.1
Location : validateCertInfo
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
255 + + + +

1.1
Location : validateCertInfo
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
264 + + + +

1.1
Location : validateCertInfo
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/webauthn/TpmAttestationStatementVerifier::verifyX5cRequirements → KILLED

+
292 + + + +

1.1
Location : verifyPublicKeysMatch
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
338 + + + +

1.1
Location : verifyPublicKeysMatch
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
345 + + + +

1.1
Location : verifyPublicKeysMatch
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
350 + + + +

1.1
Location : verifyPublicKeysMatch
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
387 + + + +

1.1
Location : parse
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

2.2
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

3.3
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
Replaced bitwise AND with OR → KILLED

+
398 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

2.2
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

3.3
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
Replaced bitwise AND with OR → KILLED

+
403 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
406 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
413 + + + +

1.1
Location : parse
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
414 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
464 + + + +

1.1
Location : name
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic::name → KILLED

+
477 + + + +

1.1
Location : verifyX5cRequirements
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
478 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
482 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
491 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
492 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
496 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
497 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
498 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
499 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
510 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

2.2
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

3.3
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

4.4
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
513 + + + +

1.1
Location : verifyX5cRequirements
Killed by : none
negated conditional → SURVIVED

+
514 + + + +

1.1
Location : verifyX5cRequirements
Killed by : none
negated conditional → SURVIVED

+
515 + + + +

1.1
Location : verifyX5cRequirements
Killed by : none
negated conditional → SURVIVED

+
517 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
518 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
522 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
523 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
527 + + + +

1.1
Location : verifyX5cRequirements
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to java/util/Optional::ifPresent → KILLED

+
529 + + + +

1.1
Location : lambda$verifyX5cRequirements$2
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
551 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

2.2
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
557 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

2.2
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

3.3
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
565 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
changed conditional boundary → KILLED

2.2
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

3.3
Location : parse
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → SURVIVED

+
567 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
572 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms::parse → KILLED

+
581 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$Tpm2bPublicKeyRsa::parse → KILLED

+
592 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

2.2
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
596 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

2.2
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
604 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms::parse → KILLED

+
625 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccPoint::parse → KILLED

+
668 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
675 + + + +

1.1
Location : parse
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/U2fRawRegisterResponse.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/U2fRawRegisterResponse.java.html new file mode 100644 index 000000000..56c6afa1f --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/U2fRawRegisterResponse.java.html @@ -0,0 +1,1364 @@ + + + + + + + + + +

U2fRawRegisterResponse.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2014-2018, Yubico AB
+ +2 + + + + + + +
// Copyright (c) 2014, Google Inc.
+ +3 + + + + + + +
// All rights reserved.
+ +4 + + + + + + +
//
+ +5 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +6 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +7 + + + + + + +
//
+ +8 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +9 + + + + + + +
//    list of conditions and the following disclaimer.
+ +10 + + + + + + +
//
+ +11 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +12 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +13 + + + + + + +
//    and/or other materials provided with the distribution.
+ +14 + + + + + + +
//
+ +15 + + + + + + +
// 3. Neither the name of Google Inc. nor the names of its contributors may be
+ +16 + + + + + + +
//    used to endorse or promote products derived from this software without
+ +17 + + + + + + +
//    specific prior written permission.
+ +18 + + + + + + +
//
+ +19 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +20 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +21 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +22 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +23 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +24 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +25 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +26 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +27 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +28 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +29 + + + + + + +
+ +30 + + + + + + +
package com.yubico.webauthn;
+ +31 + + + + + + +
+ +32 + + + + + + +
import com.google.common.io.ByteArrayDataOutput;
+ +33 + + + + + + +
import com.google.common.io.ByteStreams;
+ +34 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +35 + + + + + + +
import com.yubico.webauthn.data.COSEAlgorithmIdentifier;
+ +36 + + + + + + +
import java.security.cert.X509Certificate;
+ +37 + + + + + + +
import lombok.Value;
+ +38 + + + + + + +
+ +39 + + + + + + +
/** The register response produced by the token/key */
+ +40 + + + + + + +
@Value
+ +41 + + + + + + +
class U2fRawRegisterResponse {
+ +42 + + + + + + +
  private static final byte REGISTRATION_SIGNED_RESERVED_BYTE_VALUE = (byte) 0x00;
+ +43 + + + + + + +
+ +44 + + + + + + +
  /** The (uncompressed) x,y-representation of a curve point on the P-256 NIST elliptic curve. */
+ +45 + + + + + + +
  private final ByteArray userPublicKey;
+ +46 + + + + + + +
+ +47 + + + + + + +
  /** A handle that allows the U2F token to identify the generated key pair. */
+ +48 + + + + + + +
  private final ByteArray keyHandle;
+ +49 + + + + + + +
+ +50 + + + + + + +
  private final X509Certificate attestationCertificate;
+ +51 + + + + + + +
+ +52 + + + + + + +
  /** A ECDSA signature (on P-256) */
+ +53 + + + + + + +
  private final ByteArray signature;
+ +54 + + + + + + +
+ +55 + + + + + + +
  U2fRawRegisterResponse(
+ +56 + + + + + + +
      ByteArray userPublicKey,
+ +57 + + + + + + +
      ByteArray keyHandle,
+ +58 + + + + + + +
      X509Certificate attestationCertificate,
+ +59 + + + + + + +
      ByteArray signature) {
+ +60 + + + + + + +
    this.userPublicKey = userPublicKey;
+ +61 + + + + + + +
    this.keyHandle = keyHandle;
+ +62 + + + + + + +
    this.attestationCertificate = attestationCertificate;
+ +63 + + + + + + +
    this.signature = signature;
+ +64 + + + + + + +
  }
+ +65 + + + + + + +
+ +66 + + + + + + +
  boolean verifySignature(ByteArray appIdHash, ByteArray clientDataHash) {
+ +67 + + + + + + +
    ByteArray signedBytes = packBytesToSign(appIdHash, clientDataHash, keyHandle, userPublicKey);
+ +68 + + +2 + +1. verifySignature : replaced boolean return with true for com/yubico/webauthn/U2fRawRegisterResponse::verifySignature → KILLED
+2. verifySignature : replaced boolean return with false for com/yubico/webauthn/U2fRawRegisterResponse::verifySignature → KILLED
+ +
+
+
    return Crypto.verifySignature(
+ +69 + + + + + + +
        attestationCertificate, signedBytes, signature, COSEAlgorithmIdentifier.ES256);
+ +70 + + + + + + +
  }
+ +71 + + + + + + +
+ +72 + + + + + + +
  private static ByteArray packBytesToSign(
+ +73 + + + + + + +
      ByteArray appIdHash, ByteArray clientDataHash, ByteArray keyHandle, ByteArray userPublicKey) {
+ +74 + + + + + + +
    ByteArrayDataOutput encoded = ByteStreams.newDataOutput();
+ +75 + + +1 + +1. packBytesToSign : removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED
+ +
+
+
    encoded.write(REGISTRATION_SIGNED_RESERVED_BYTE_VALUE);
+ +76 + + +1 + +1. packBytesToSign : removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED
+ +
+
+
    encoded.write(appIdHash.getBytes());
+ +77 + + +1 + +1. packBytesToSign : removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED
+ +
+
+
    encoded.write(clientDataHash.getBytes());
+ +78 + + +1 + +1. packBytesToSign : removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED
+ +
+
+
    encoded.write(keyHandle.getBytes());
+ +79 + + +1 + +1. packBytesToSign : removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED
+ +
+
+
    encoded.write(userPublicKey.getBytes());
+ +80 + + +1 + +1. packBytesToSign : replaced return value with null for com/yubico/webauthn/U2fRawRegisterResponse::packBytesToSign → KILLED
+ +
+
+
    return new ByteArray(encoded.toByteArray());
+ +81 + + + + + + +
  }
+ +82 + + + + + + +
}

Mutations

68 + + + +

1.1
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced boolean return with true for com/yubico/webauthn/U2fRawRegisterResponse::verifySignature → KILLED

2.2
Location : verifySignature
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced boolean return with false for com/yubico/webauthn/U2fRawRegisterResponse::verifySignature → KILLED

+
75 + + + +

1.1
Location : packBytesToSign
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED

+
76 + + + +

1.1
Location : packBytesToSign
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED

+
77 + + + +

1.1
Location : packBytesToSign
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED

+
78 + + + +

1.1
Location : packBytesToSign
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED

+
79 + + + +

1.1
Location : packBytesToSign
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
removed call to com/google/common/io/ByteArrayDataOutput::write → KILLED

+
80 + + + +

1.1
Location : packBytesToSign
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/U2fRawRegisterResponse::packBytesToSign → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/WebAuthnCodecs.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/WebAuthnCodecs.java.html new file mode 100644 index 000000000..89596fe5c --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/WebAuthnCodecs.java.html @@ -0,0 +1,3590 @@ + + + + + + + + + +

WebAuthnCodecs.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import COSE.CoseException;
+ +28 + + + + + + +
import COSE.OneKey;
+ +29 + + + + + + +
import com.google.common.primitives.Bytes;
+ +30 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +31 + + + + + + +
import com.yubico.webauthn.data.ByteArray;
+ +32 + + + + + + +
import com.yubico.webauthn.data.COSEAlgorithmIdentifier;
+ +33 + + + + + + +
import java.io.IOException;
+ +34 + + + + + + +
import java.math.BigInteger;
+ +35 + + + + + + +
import java.security.KeyFactory;
+ +36 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +37 + + + + + + +
import java.security.PublicKey;
+ +38 + + + + + + +
import java.security.interfaces.ECPublicKey;
+ +39 + + + + + + +
import java.security.spec.InvalidKeySpecException;
+ +40 + + + + + + +
import java.security.spec.RSAPublicKeySpec;
+ +41 + + + + + + +
import java.security.spec.X509EncodedKeySpec;
+ +42 + + + + + + +
import java.util.Arrays;
+ +43 + + + + + + +
import java.util.HashMap;
+ +44 + + + + + + +
import java.util.Map;
+ +45 + + + + + + +
+ +46 + + + + + + +
final class WebAuthnCodecs {
+ +47 + + + + + + +
+ +48 + + + + + + +
  private static final ByteArray ED25519_CURVE_OID =
+ +49 + + + + + + +
      new ByteArray(new byte[] {0x30, 0x05, 0x06, 0x03, 0x2B, 0x65, 0x70});
+ +50 + + + + + + +
+ +51 + + + + + + +
  static ByteArray ecPublicKeyToRaw(ECPublicKey key) {
+ +52 + + + + + + +
+ +53 + + + + + + +
    final int fieldSizeBytes =
+ +54 + + + + + + +
        Math.toIntExact(
+ +55 + + +1 + +1. ecPublicKeyToRaw : Replaced double division with multiplication → KILLED
+ +
+
+
            Math.round(Math.ceil(key.getParams().getCurve().getField().getFieldSize() / 8.0)));
+ +56 + + + + + + +
    byte[] x = key.getW().getAffineX().toByteArray();
+ +57 + + + + + + +
    byte[] y = key.getW().getAffineY().toByteArray();
+ +58 + + +1 + +1. ecPublicKeyToRaw : Replaced integer subtraction with addition → KILLED
+ +
+
+
    byte[] xPadding = new byte[Math.max(0, fieldSizeBytes - x.length)];
+ +59 + + +1 + +1. ecPublicKeyToRaw : Replaced integer subtraction with addition → KILLED
+ +
+
+
    byte[] yPadding = new byte[Math.max(0, fieldSizeBytes - y.length)];
+ +60 + + + + + + +
+ +61 + + +1 + +1. ecPublicKeyToRaw : removed call to java/util/Arrays::fill → SURVIVED
+ +
+
+
    Arrays.fill(xPadding, (byte) 0);
+ +62 + + +1 + +1. ecPublicKeyToRaw : removed call to java/util/Arrays::fill → SURVIVED
+ +
+
+
    Arrays.fill(yPadding, (byte) 0);
+ +63 + + + + + + +
+ +64 + + +2 + +1. ecPublicKeyToRaw : Replaced integer subtraction with addition → KILLED
+2. ecPublicKeyToRaw : replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::ecPublicKeyToRaw → KILLED
+ +
+
+
    return new ByteArray(
+ +65 + + + + + + +
        Bytes.concat(
+ +66 + + + + + + +
            new byte[] {0x04},
+ +67 + + + + + + +
            xPadding,
+ +68 + + +1 + +1. ecPublicKeyToRaw : Replaced integer subtraction with addition → KILLED
+ +
+
+
            Arrays.copyOfRange(x, Math.max(0, x.length - fieldSizeBytes), x.length),
+ +69 + + + + + + +
            yPadding,
+ +70 + + + + + + +
            Arrays.copyOfRange(y, Math.max(0, y.length - fieldSizeBytes), y.length)));
+ +71 + + + + + + +
  }
+ +72 + + + + + + +
+ +73 + + + + + + +
  static ByteArray rawEcKeyToCose(ByteArray key) {
+ +74 + + + + + + +
    final byte[] keyBytes = key.getBytes();
+ +75 + + + + + + +
    final int len = keyBytes.length;
+ +76 + + +1 + +1. rawEcKeyToCose : Replaced integer subtraction with addition → KILLED
+ +
+
+
    final int lenSub1 = keyBytes.length - 1;
+ +77 + + +7 + +1. rawEcKeyToCose : negated conditional → SURVIVED
+2. rawEcKeyToCose : negated conditional → SURVIVED
+3. rawEcKeyToCose : negated conditional → SURVIVED
+4. rawEcKeyToCose : negated conditional → NO_COVERAGE
+5. rawEcKeyToCose : negated conditional → KILLED
+6. rawEcKeyToCose : negated conditional → KILLED
+7. rawEcKeyToCose : negated conditional → KILLED
+ +
+
+
    if (!(len == 64
+ +78 + + + + + + +
        || len == 96
+ +79 + + + + + + +
        || len == 132
+ +80 + + + + + + +
        || (keyBytes[0] == 0x04 && (lenSub1 == 64 || lenSub1 == 96 || lenSub1 == 132)))) {
+ +81 + + + + + + +
      throw new IllegalArgumentException(
+ +82 + + + + + + +
          String.format(
+ +83 + + + + + + +
              "Raw key must be 64, 96 or 132 bytes long, or start with 0x04 and be 65, 97 or 133 bytes long; was %d bytes starting with %02x",
+ +84 + + + + + + +
              keyBytes.length, keyBytes[0]));
+ +85 + + + + + + +
    }
+ +86 + + +3 + +1. rawEcKeyToCose : negated conditional → KILLED
+2. rawEcKeyToCose : negated conditional → KILLED
+3. rawEcKeyToCose : negated conditional → KILLED
+ +
+
+
    final int start = (len == 64 || len == 96 || len == 132) ? 0 : 1;
+ +87 + + +2 + +1. rawEcKeyToCose : Replaced integer subtraction with addition → KILLED
+2. rawEcKeyToCose : Replaced integer division with multiplication → KILLED
+ +
+
+
    final int coordinateLength = (len - start) / 2;
+ +88 + + + + + + +
+ +89 + + + + + + +
    final Map<Long, Object> coseKey = new HashMap<>();
+ +90 + + + + + + +
    coseKey.put(1L, 2L); // Key type: EC
+ +91 + + + + + + +
+ +92 + + + + + + +
    final COSEAlgorithmIdentifier coseAlg;
+ +93 + + + + + + +
    final int coseCrv;
+ +94 + + +1 + +1. rawEcKeyToCose : Replaced integer subtraction with addition → KILLED
+ +
+
+
    switch (len - start) {
+ +95 + + + + + + +
      case 64:
+ +96 + + + + + + +
        coseAlg = COSEAlgorithmIdentifier.ES256;
+ +97 + + + + + + +
        coseCrv = 1;
+ +98 + + + + + + +
        break;
+ +99 + + + + + + +
      case 96:
+ +100 + + + + + + +
        coseAlg = COSEAlgorithmIdentifier.ES384;
+ +101 + + + + + + +
        coseCrv = 2;
+ +102 + + + + + + +
        break;
+ +103 + + + + + + +
      case 132:
+ +104 + + + + + + +
        coseAlg = COSEAlgorithmIdentifier.ES512;
+ +105 + + + + + + +
        coseCrv = 3;
+ +106 + + + + + + +
        break;
+ +107 + + + + + + +
      default:
+ +108 + + + + + + +
        throw new RuntimeException(
+ +109 + + + + + + +
            "Failed to determine COSE EC algorithm. This should not be possible, please file a bug report.");
+ +110 + + + + + + +
    }
+ +111 + + + + + + +
    coseKey.put(3L, coseAlg.getId());
+ +112 + + + + + + +
    coseKey.put(-1L, coseCrv);
+ +113 + + + + + + +
+ +114 + + +1 + +1. rawEcKeyToCose : Replaced integer addition with subtraction → KILLED
+ +
+
+
    coseKey.put(-2L, Arrays.copyOfRange(keyBytes, start, start + coordinateLength)); // x
+ +115 + + + + + + +
    coseKey.put(
+ +116 + + +3 + +1. rawEcKeyToCose : Replaced integer addition with subtraction → KILLED
+2. rawEcKeyToCose : Replaced integer addition with subtraction → KILLED
+3. rawEcKeyToCose : Replaced integer multiplication with division → KILLED
+ +
+
+
        -3L,
+ +117 + + + + + + +
        Arrays.copyOfRange(keyBytes, start + coordinateLength, start + 2 * coordinateLength)); // y
+ +118 + + + + + + +
+ +119 + + +1 + +1. rawEcKeyToCose : replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::rawEcKeyToCose → KILLED
+ +
+
+
    return new ByteArray(CBORObject.FromObject(coseKey).EncodeToBytes());
+ +120 + + + + + + +
  }
+ +121 + + + + + + +
+ +122 + + + + + + +
  static PublicKey importCosePublicKey(ByteArray key)
+ +123 + + + + + + +
      throws CoseException, IOException, InvalidKeySpecException, NoSuchAlgorithmException {
+ +124 + + + + + + +
    CBORObject cose = CBORObject.DecodeFromBytes(key.getBytes());
+ +125 + + + + + + +
    final int kty = cose.get(CBORObject.FromObject(1)).AsInt32();
+ +126 + + + + + + +
    switch (kty) {
+ +127 + + + + + + +
      case 1:
+ +128 + + + + + + +
        // COSE-JAVA is hardcoded to ed25519-java provider ("EdDSA") which would require an
+ +129 + + + + + + +
        // additional dependency to parse EdDSA keys via the OneKey constructor
+ +130 + + +1 + +1. importCosePublicKey : replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey → KILLED
+ +
+
+
        return importCoseEdDsaPublicKey(cose);
+ +131 + + + + + + +
      case 2:
+ +132 + + +1 + +1. importCosePublicKey : replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey → KILLED
+ +
+
+
        return importCoseP256PublicKey(cose);
+ +133 + + + + + + +
      case 3:
+ +134 + + + + + + +
        // COSE-JAVA supports RSA in v1.1.0 but not in v1.0.0
+ +135 + + +1 + +1. importCosePublicKey : replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey → KILLED
+ +
+
+
        return importCoseRsaPublicKey(cose);
+ +136 + + + + + + +
      default:
+ +137 + + + + + + +
        throw new IllegalArgumentException("Unsupported key type: " + kty);
+ +138 + + + + + + +
    }
+ +139 + + + + + + +
  }
+ +140 + + + + + + +
+ +141 + + + + + + +
  private static PublicKey importCoseRsaPublicKey(CBORObject cose)
+ +142 + + + + + + +
      throws NoSuchAlgorithmException, InvalidKeySpecException {
+ +143 + + + + + + +
    RSAPublicKeySpec spec =
+ +144 + + + + + + +
        new RSAPublicKeySpec(
+ +145 + + + + + + +
            new BigInteger(1, cose.get(CBORObject.FromObject(-1)).GetByteString()),
+ +146 + + + + + + +
            new BigInteger(1, cose.get(CBORObject.FromObject(-2)).GetByteString()));
+ +147 + + +1 + +1. importCoseRsaPublicKey : replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseRsaPublicKey → KILLED
+ +
+
+
    return KeyFactory.getInstance("RSA").generatePublic(spec);
+ +148 + + + + + + +
  }
+ +149 + + + + + + +
+ +150 + + + + + + +
  private static ECPublicKey importCoseP256PublicKey(CBORObject cose) throws CoseException {
+ +151 + + +1 + +1. importCoseP256PublicKey : replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseP256PublicKey → KILLED
+ +
+
+
    return (ECPublicKey) new OneKey(cose).AsPublicKey();
+ +152 + + + + + + +
  }
+ +153 + + + + + + +
+ +154 + + + + + + +
  private static PublicKey importCoseEdDsaPublicKey(CBORObject cose)
+ +155 + + + + + + +
      throws InvalidKeySpecException, NoSuchAlgorithmException {
+ +156 + + + + + + +
    final int curveId = cose.get(CBORObject.FromObject(-1)).AsInt32();
+ +157 + + + + + + +
    switch (curveId) {
+ +158 + + + + + + +
      case 6:
+ +159 + + +1 + +1. importCoseEdDsaPublicKey : replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseEdDsaPublicKey → KILLED
+ +
+
+
        return importCoseEd25519PublicKey(cose);
+ +160 + + + + + + +
      default:
+ +161 + + + + + + +
        throw new IllegalArgumentException("Unsupported EdDSA curve: " + curveId);
+ +162 + + + + + + +
    }
+ +163 + + + + + + +
  }
+ +164 + + + + + + +
+ +165 + + + + + + +
  private static PublicKey importCoseEd25519PublicKey(CBORObject cose)
+ +166 + + + + + + +
      throws InvalidKeySpecException, NoSuchAlgorithmException {
+ +167 + + + + + + +
    final ByteArray rawKey = new ByteArray(cose.get(CBORObject.FromObject(-2)).GetByteString());
+ +168 + + + + + + +
    final ByteArray x509Key =
+ +169 + + +2 + +1. importCoseEd25519PublicKey : Replaced integer addition with subtraction → KILLED
+2. importCoseEd25519PublicKey : Replaced integer addition with subtraction → KILLED
+ +
+
+
        new ByteArray(new byte[] {0x30, (byte) (ED25519_CURVE_OID.size() + 3 + rawKey.size())})
+ +170 + + + + + + +
            .concat(ED25519_CURVE_OID)
+ +171 + + +1 + +1. importCoseEd25519PublicKey : Replaced integer addition with subtraction → KILLED
+ +
+
+
            .concat(new ByteArray(new byte[] {0x03, (byte) (rawKey.size() + 1), 0}))
+ +172 + + + + + + +
            .concat(rawKey);
+ +173 + + + + + + +
+ +174 + + + + + + +
    KeyFactory kFact = KeyFactory.getInstance("EdDSA");
+ +175 + + +1 + +1. importCoseEd25519PublicKey : replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseEd25519PublicKey → KILLED
+ +
+
+
    return kFact.generatePublic(new X509EncodedKeySpec(x509Key.getBytes()));
+ +176 + + + + + + +
  }
+ +177 + + + + + + +
+ +178 + + + + + + +
  static String getJavaAlgorithmName(COSEAlgorithmIdentifier alg) {
+ +179 + + + + + + +
    switch (alg) {
+ +180 + + + + + + +
      case EdDSA:
+ +181 + + +1 + +1. getJavaAlgorithmName : replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED
+ +
+
+
        return "EDDSA";
+ +182 + + + + + + +
      case ES256:
+ +183 + + +1 + +1. getJavaAlgorithmName : replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED
+ +
+
+
        return "SHA256withECDSA";
+ +184 + + + + + + +
      case ES384:
+ +185 + + +1 + +1. getJavaAlgorithmName : replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED
+ +
+
+
        return "SHA384withECDSA";
+ +186 + + + + + + +
      case ES512:
+ +187 + + +1 + +1. getJavaAlgorithmName : replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED
+ +
+
+
        return "SHA512withECDSA";
+ +188 + + + + + + +
      case RS256:
+ +189 + + +1 + +1. getJavaAlgorithmName : replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED
+ +
+
+
        return "SHA256withRSA";
+ +190 + + + + + + +
      case RS384:
+ +191 + + +1 + +1. getJavaAlgorithmName : replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED
+ +
+
+
        return "SHA384withRSA";
+ +192 + + + + + + +
      case RS512:
+ +193 + + +1 + +1. getJavaAlgorithmName : replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED
+ +
+
+
        return "SHA512withRSA";
+ +194 + + + + + + +
      case RS1:
+ +195 + + +1 + +1. getJavaAlgorithmName : replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED
+ +
+
+
        return "SHA1withRSA";
+ +196 + + + + + + +
      default:
+ +197 + + + + + + +
        throw new IllegalArgumentException("Unknown algorithm: " + alg);
+ +198 + + + + + + +
    }
+ +199 + + + + + + +
  }
+ +200 + + + + + + +
+ +201 + + + + + + +
  static String jwsAlgorithmNameToJavaAlgorithmName(String alg) {
+ +202 + + +1 + +1. jwsAlgorithmNameToJavaAlgorithmName : negated conditional → KILLED
+ +
+
+
    switch (alg) {
+ +203 + + + + + + +
      case "RS256":
+ +204 + + +1 + +1. jwsAlgorithmNameToJavaAlgorithmName : replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::jwsAlgorithmNameToJavaAlgorithmName → KILLED
+ +
+
+
        return "SHA256withRSA";
+ +205 + + + + + + +
    }
+ +206 + + + + + + +
    throw new IllegalArgumentException("Unknown algorithm: " + alg);
+ +207 + + + + + + +
  }
+ +208 + + + + + + +
}

Mutations

55 + + + +

1.1
Location : ecPublicKeyToRaw
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced double division with multiplication → KILLED

+
58 + + + +

1.1
Location : ecPublicKeyToRaw
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer subtraction with addition → KILLED

+
59 + + + +

1.1
Location : ecPublicKeyToRaw
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer subtraction with addition → KILLED

+
61 + + + +

1.1
Location : ecPublicKeyToRaw
Killed by : none
removed call to java/util/Arrays::fill → SURVIVED

+
62 + + + +

1.1
Location : ecPublicKeyToRaw
Killed by : none
removed call to java/util/Arrays::fill → SURVIVED

+
64 + + + +

1.1
Location : ecPublicKeyToRaw
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer subtraction with addition → KILLED

2.2
Location : ecPublicKeyToRaw
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::ecPublicKeyToRaw → KILLED

+
68 + + + +

1.1
Location : ecPublicKeyToRaw
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer subtraction with addition → KILLED

+
76 + + + +

1.1
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer subtraction with addition → KILLED

+
77 + + + +

1.1
Location : rawEcKeyToCose
Killed by : none
negated conditional → SURVIVED

2.2
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

3.3
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

4.4
Location : rawEcKeyToCose
Killed by : none
negated conditional → SURVIVED

5.5
Location : rawEcKeyToCose
Killed by : none
negated conditional → SURVIVED

6.6
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

7.7
Location : rawEcKeyToCose
Killed by : none
negated conditional → NO_COVERAGE

+
86 + + + +

1.1
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

2.2
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

3.3
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
negated conditional → KILLED

+
87 + + + +

1.1
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer subtraction with addition → KILLED

2.2
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer division with multiplication → KILLED

+
94 + + + +

1.1
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer subtraction with addition → KILLED

+
114 + + + +

1.1
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer addition with subtraction → KILLED

+
116 + + + +

1.1
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer addition with subtraction → KILLED

2.2
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer addition with subtraction → KILLED

3.3
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
Replaced integer multiplication with division → KILLED

+
119 + + + +

1.1
Location : rawEcKeyToCose
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::rawEcKeyToCose → KILLED

+
130 + + + +

1.1
Location : importCosePublicKey
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey → KILLED

+
132 + + + +

1.1
Location : importCosePublicKey
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey → KILLED

+
135 + + + +

1.1
Location : importCosePublicKey
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey → KILLED

+
147 + + + +

1.1
Location : importCoseRsaPublicKey
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseRsaPublicKey → KILLED

+
151 + + + +

1.1
Location : importCoseP256PublicKey
Killed by : com.yubico.webauthn.RelyingPartyUserIdentificationSpec
replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseP256PublicKey → KILLED

+
159 + + + +

1.1
Location : importCoseEdDsaPublicKey
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseEdDsaPublicKey → KILLED

+
169 + + + +

1.1
Location : importCoseEd25519PublicKey
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
Replaced integer addition with subtraction → KILLED

2.2
Location : importCoseEd25519PublicKey
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
Replaced integer addition with subtraction → KILLED

+
171 + + + +

1.1
Location : importCoseEd25519PublicKey
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
Replaced integer addition with subtraction → KILLED

+
175 + + + +

1.1
Location : importCoseEd25519PublicKey
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseEd25519PublicKey → KILLED

+
181 + + + +

1.1
Location : getJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED

+
183 + + + +

1.1
Location : getJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED

+
185 + + + +

1.1
Location : getJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED

+
187 + + + +

1.1
Location : getJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED

+
189 + + + +

1.1
Location : getJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED

+
191 + + + +

1.1
Location : getJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyTest.defaultSettingsLogWarningIfSomeAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED

+
193 + + + +

1.1
Location : getJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyTest.defaultSettingsLogWarningIfSomeAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)
replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED

+
195 + + + +

1.1
Location : getJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyV2AssertionSpec
replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName → KILLED

+
202 + + + +

1.1
Location : jwsAlgorithmNameToJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
negated conditional → KILLED

+
204 + + + +

1.1
Location : jwsAlgorithmNameToJavaAlgorithmName
Killed by : com.yubico.webauthn.RelyingPartyV2RegistrationSpec
replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::jwsAlgorithmNameToJavaAlgorithmName → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/X5cAttestationStatementVerifier.java.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/X5cAttestationStatementVerifier.java.html new file mode 100644 index 000000000..a8c943fca --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/X5cAttestationStatementVerifier.java.html @@ -0,0 +1,1251 @@ + + + + + + + + + +

X5cAttestationStatementVerifier.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.webauthn;
+ +26 + + + + + + +
+ +27 + + + + + + +
import com.fasterxml.jackson.databind.JsonNode;
+ +28 + + + + + + +
import com.yubico.internal.util.CertificateParser;
+ +29 + + + + + + +
import com.yubico.webauthn.data.AttestationObject;
+ +30 + + + + + + +
import java.io.IOException;
+ +31 + + + + + + +
import java.security.cert.CertificateException;
+ +32 + + + + + + +
import java.security.cert.X509Certificate;
+ +33 + + + + + + +
import java.util.ArrayList;
+ +34 + + + + + + +
import java.util.List;
+ +35 + + + + + + +
import java.util.Optional;
+ +36 + + + + + + +
+ +37 + + + + + + +
interface X5cAttestationStatementVerifier {
+ +38 + + + + + + +
+ +39 + + + + + + +
  default Optional<X509Certificate> getX5cAttestationCertificate(
+ +40 + + + + + + +
      AttestationObject attestationObject) throws CertificateException {
+ +41 + + +2 + +1. getX5cAttestationCertificate : replaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::getX5cAttestationCertificate → KILLED
+2. lambda$getX5cAttestationCertificate$0 : replaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::lambda$getX5cAttestationCertificate$0 → KILLED
+ +
+
+
    return getAttestationTrustPath(attestationObject).flatMap(certs -> certs.stream().findFirst());
+ +42 + + + + + + +
  }
+ +43 + + + + + + +
+ +44 + + + + + + +
  default Optional<List<X509Certificate>> getAttestationTrustPath(
+ +45 + + + + + + +
      AttestationObject attestationObject) throws CertificateException {
+ +46 + + + + + + +
    JsonNode x5cNode = getX5cArray(attestationObject);
+ +47 + + + + + + +
+ +48 + + +2 + +1. getAttestationTrustPath : negated conditional → KILLED
+2. getAttestationTrustPath : negated conditional → KILLED
+ +
+
+
    if (x5cNode != null && x5cNode.isArray()) {
+ +49 + + + + + + +
      List<X509Certificate> certs = new ArrayList<>(x5cNode.size());
+ +50 + + + + + + +
+ +51 + + + + + + +
      for (JsonNode binary : x5cNode) {
+ +52 + + +1 + +1. getAttestationTrustPath : negated conditional → KILLED
+ +
+
+
        if (binary.isBinary()) {
+ +53 + + + + + + +
          try {
+ +54 + + + + + + +
            certs.add(CertificateParser.parseDer(binary.binaryValue()));
+ +55 + + + + + + +
          } catch (IOException e) {
+ +56 + + + + + + +
            throw new RuntimeException(
+ +57 + + + + + + +
                "binary.isBinary() was true but binary.binaryValue() failed", e);
+ +58 + + + + + + +
          }
+ +59 + + + + + + +
        } else {
+ +60 + + + + + + +
          throw new IllegalArgumentException(
+ +61 + + + + + + +
              String.format(
+ +62 + + + + + + +
                  "Each element of \"x5c\" property of attestation statement must be a binary value, was: %s",
+ +63 + + + + + + +
                  binary.getNodeType()));
+ +64 + + + + + + +
        }
+ +65 + + + + + + +
      }
+ +66 + + + + + + +
+ +67 + + +1 + +1. getAttestationTrustPath : replaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::getAttestationTrustPath → KILLED
+ +
+
+
      return Optional.of(certs);
+ +68 + + + + + + +
    } else {
+ +69 + + + + + + +
      return Optional.empty();
+ +70 + + + + + + +
    }
+ +71 + + + + + + +
  }
+ +72 + + + + + + +
+ +73 + + + + + + +
  default JsonNode getX5cArray(AttestationObject attestationObject) {
+ +74 + + +1 + +1. getX5cArray : replaced return value with null for com/yubico/webauthn/X5cAttestationStatementVerifier::getX5cArray → KILLED
+ +
+
+
    return attestationObject.getAttestationStatement().get("x5c");
+ +75 + + + + + + +
  }
+ +76 + + + + + + +
}

Mutations

41 + + + +

1.1
Location : getX5cAttestationCertificate
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::getX5cAttestationCertificate → KILLED

2.2
Location : lambda$getX5cAttestationCertificate$0
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::lambda$getX5cAttestationCertificate$0 → KILLED

+
48 + + + +

1.1
Location : getAttestationTrustPath
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

2.2
Location : getAttestationTrustPath
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
52 + + + +

1.1
Location : getAttestationTrustPath
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
negated conditional → KILLED

+
67 + + + +

1.1
Location : getAttestationTrustPath
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::getAttestationTrustPath → KILLED

+
74 + + + +

1.1
Location : getX5cArray
Killed by : com.yubico.webauthn.RelyingPartyCeremoniesSpec
replaced return value with null for com/yubico/webauthn/X5cAttestationStatementVerifier::getX5cArray → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/index.html b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/index.html new file mode 100644 index 000000000..f4ab24ffb --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/com.yubico.webauthn/index.html @@ -0,0 +1,244 @@ + + + + + + + + +

Pit Test Coverage Report

+

Package Summary

+

com.yubico.webauthn

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
2785%
1661/1948
89%
642/720
92%
642/697
+ + +

Breakdown by Class

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLine CoverageMutation CoverageTest Strength
AndroidSafetynetAttestationStatementVerifier.java
83%
76/92
100%
22/22
100%
22/22
AppleAttestationStatementVerifier.java
84%
31/37
75%
6/8
86%
6/7
AssertionRequest.java
100%
36/36
100%
17/17
100%
17/17
AssertionResult.java
100%
26/26
94%
16/17
94%
16/17
AssertionResultV2.java
95%
20/21
93%
13/14
93%
13/14
CredentialRecord.java
100%
5/5
100%
2/2
100%
2/2
CredentialRepositoryV1ToV2Adapter.java
56%
5/9
83%
5/6
100%
5/5
Crypto.java
94%
17/18
100%
13/13
100%
13/13
FidoU2fAttestationStatementVerifier.java
71%
52/73
83%
19/23
90%
19/21
FinishAssertionOptions.java
85%
17/20
75%
6/8
100%
6/6
FinishAssertionSteps.java
79%
225/284
88%
91/103
90%
91/101
FinishRegistrationOptions.java
84%
16/19
75%
6/8
100%
6/6
FinishRegistrationSteps.java
82%
227/277
89%
85/96
90%
85/94
NoneAttestationStatementVerifier.java
100%
3/3
100%
2/2
100%
2/2
OriginMatcher.java
97%
34/35
100%
22/22
100%
22/22
PackedAttestationStatementVerifier.java
77%
106/137
86%
36/42
95%
36/38
RegisteredCredential.java
97%
37/38
87%
13/15
93%
13/14
RegistrationResult.java
92%
57/62
93%
28/30
97%
28/29
RelyingParty.java
92%
142/155
95%
37/39
100%
37/37
RelyingPartyV2.java
96%
128/133
100%
35/35
100%
35/35
StartAssertionOptions.java
97%
34/35
100%
22/22
100%
22/22
StartRegistrationOptions.java
96%
23/24
100%
13/13
100%
13/13
TokenBindingValidator.java
79%
19/24
23%
3/13
23%
3/13
TpmAttestationStatementVerifier.java
86%
229/267
84%
74/88
86%
74/86
U2fRawRegisterResponse.java
75%
15/20
100%
8/8
100%
8/8
WebAuthnCodecs.java
85%
69/81
87%
41/47
89%
41/46
X5cAttestationStatementVerifier.java
71%
12/17
100%
7/7
100%
7/7
+
+ + + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/index.html b/mutation-coverage-reports/webauthn-server-core/index.html new file mode 100644 index 000000000..0cf0d9193 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/index.html @@ -0,0 +1,109 @@ + + + + + + + + +

Pit Test Coverage Report

+ +

Project Summary

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
6887%
2698/3113
89%
1082/1210
94%
1082/1152
+ + +

Breakdown by Package

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumber of ClassesLine CoverageMutation CoverageTest Strength
com.yubico.webauthn27
85%
1661/1948
89%
642/720
92%
642/697
com.yubico.webauthn.attestation1
94%
29/31
93%
13/14
93%
13/14
com.yubico.webauthn.data33
94%
922/982
94%
402/429
97%
402/416
com.yubico.webauthn.extension.appid1
100%
28/28
100%
13/13
100%
13/13
com.yubico.webauthn.extension.uvm3
73%
58/79
50%
12/24
100%
12/12
com.yubico.webauthn.meta3
0%
0/45
0%
0/10
100%
0/0
+
+ + + +
+ +Report generated by PIT 1.15.0 + +
+
+ +Enhanced functionality available at arcmutate.com + + + \ No newline at end of file diff --git a/mutation-coverage-reports/webauthn-server-core/mutations.xml b/mutation-coverage-reports/webauthn-server-core/mutations.xml new file mode 100644 index 000000000..b084c3a8f --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/mutations.xml @@ -0,0 +1,1213 @@ + + +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;91org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::getAttestationType +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierlambda$verifyAttestationSignature$0(Lcom/fasterxml/jackson/databind/JsonNode;)Ljava/lang/IllegalArgumentException;119org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator145replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::lambda$verifyAttestationSignature$0 +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierlambda$verifyAttestationSignature$1()Ljava/lang/IllegalArgumentException;132org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::lambda$verifyAttestationSignature$1 +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierlambda$verifyX5cRequirements$2(Lcom/yubico/webauthn/data/ByteArray;[B)V529org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator142com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifiervalidateCertInfo(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestationObject;)V240org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator8520com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifiervalidateCertInfo(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestationObject;)V247org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator10024com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifiervalidateCertInfo(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestationObject;)V255org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator11627com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifiervalidateCertInfo(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestationObject;)V264org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator13132com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/webauthn/TpmAttestationStatementVerifier::verifyX5cRequirements +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z104org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator152com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator204com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator257com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z111org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5612com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z112org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6114com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z122org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10222com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z123org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10724com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z140org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator16935com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z141org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator17437com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z152org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator22447com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z153org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator22949com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z158org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator25654com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z159org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator26156com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z104org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4610com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z111org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7817removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z122org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator12427removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z140org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator19140removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z152org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator24652removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z158org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator27859removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z180org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator32870com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/webauthn/TpmAttestationStatementVerifier::verifyPublicKeysMatch +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z192org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator36577com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/webauthn/TpmAttestationStatementVerifier::validateCertInfo +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z197org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator38581com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/TpmAttestationStatementVerifier::verifyAttestationSignature +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyPublicKeysMatch(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;)V292org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator8220com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyPublicKeysMatch(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;)V338org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator21449com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyPublicKeysMatch(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;)V345org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator26763com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyPublicKeysMatch(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;)V350org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator30471com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V478org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V491org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8620com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V492org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator9322com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V496org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator12332com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V497org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator12934com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V498org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator14337com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V498org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator14739com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V499org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator16142com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V499org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator16544com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V510org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator21254com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V510org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator21455com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V510org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator21656com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V513org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator23259negated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V514org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator24662negated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V515org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator26065negated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V518org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator27870com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V518org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator28373com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V523org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator31179com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V477org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator296removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V482org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator5011com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V510org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator27168com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V517org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator30377com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V522org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator32482com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V527org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator33384com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to java/util/Optional::ifPresent +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsecPublicKeyToRaw(Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray;55org.pitest.mutationtest.engine.gregor.mutators.MathMutator124com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced double division with multiplication +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsecPublicKeyToRaw(Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray;58org.pitest.mutationtest.engine.gregor.mutators.MathMutator3913com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer subtraction with addition +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsecPublicKeyToRaw(Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray;59org.pitest.mutationtest.engine.gregor.mutators.MathMutator4914com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer subtraction with addition +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsecPublicKeyToRaw(Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray;64org.pitest.mutationtest.engine.gregor.mutators.MathMutator8917com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer subtraction with addition +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsecPublicKeyToRaw(Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray;68org.pitest.mutationtest.engine.gregor.mutators.MathMutator10819com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer subtraction with addition +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsecPublicKeyToRaw(Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray;61org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator5715removed call to java/util/Arrays::fill +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsecPublicKeyToRaw(Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray;62org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator6216removed call to java/util/Arrays::fill +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsecPublicKeyToRaw(Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray;64org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator12223com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/WebAuthnCodecs::ecPublicKeyToRaw +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsgetJavaAlgorithmName(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String;181org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator122com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsgetJavaAlgorithmName(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String;183org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator173com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsgetJavaAlgorithmName(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String;185org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator224com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsgetJavaAlgorithmName(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String;187org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator275com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsgetJavaAlgorithmName(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String;189org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator326com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsgetJavaAlgorithmName(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String;191org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator377com.yubico.webauthn.RelyingPartyTest.defaultSettingsLogWarningIfSomeAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsgetJavaAlgorithmName(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String;193org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator428com.yubico.webauthn.RelyingPartyTest.defaultSettingsLogWarningIfSomeAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsgetJavaAlgorithmName(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String;195org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator479com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCoseEd25519PublicKey(Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey;169org.pitest.mutationtest.engine.gregor.mutators.MathMutator295com.yubico.webauthn.RelyingPartyCeremoniesSpecReplaced integer addition with subtraction +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCoseEd25519PublicKey(Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey;169org.pitest.mutationtest.engine.gregor.mutators.MathMutator326com.yubico.webauthn.RelyingPartyCeremoniesSpecReplaced integer addition with subtraction +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCoseEd25519PublicKey(Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey;171org.pitest.mutationtest.engine.gregor.mutators.MathMutator559com.yubico.webauthn.RelyingPartyCeremoniesSpecReplaced integer addition with subtraction +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCoseEd25519PublicKey(Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey;175org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator8316com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseEd25519PublicKey +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCoseEdDsaPublicKey(Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey;159org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator185com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseEdDsaPublicKey +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCoseP256PublicKey(Lcom/upokecenter/cbor/CBORObject;)Ljava/security/interfaces/ECPublicKey;151org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator92com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseP256PublicKey +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCosePublicKey(Lcom/yubico/webauthn/data/ByteArray;)Ljava/security/PublicKey;130org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator247com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCosePublicKey(Lcom/yubico/webauthn/data/ByteArray;)Ljava/security/PublicKey;132org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator309com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCosePublicKey(Lcom/yubico/webauthn/data/ByteArray;)Ljava/security/PublicKey;135org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator3611com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsimportCoseRsaPublicKey(Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey;147org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator3511com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseRsaPublicKey +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsjwsAlgorithmNameToJavaAlgorithmName(Ljava/lang/String;)Ljava/lang/String;202org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator153com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsjwsAlgorithmNameToJavaAlgorithmName(Ljava/lang/String;)Ljava/lang/String;204org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator266com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::jwsAlgorithmNameToJavaAlgorithmName +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;76org.pitest.mutationtest.engine.gregor.mutators.MathMutator161com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer subtraction with addition +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;87org.pitest.mutationtest.engine.gregor.mutators.MathMutator9718com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer subtraction with addition +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;87org.pitest.mutationtest.engine.gregor.mutators.MathMutator9918com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer division with multiplication +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;94org.pitest.mutationtest.engine.gregor.mutators.MathMutator12022com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer subtraction with addition +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;114org.pitest.mutationtest.engine.gregor.mutators.MathMutator19536com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer addition with subtraction +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;116org.pitest.mutationtest.engine.gregor.mutators.MathMutator20939com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer addition with subtraction +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;116org.pitest.mutationtest.engine.gregor.mutators.MathMutator21339com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer multiplication with division +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;116org.pitest.mutationtest.engine.gregor.mutators.MathMutator21439com.yubico.webauthn.RelyingPartyUserIdentificationSpecReplaced integer addition with subtraction +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator221negated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator252negated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator283negated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator334com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator365com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator396com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator427negated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;86org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator7613com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;86org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator7914com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;86org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8215com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +WebAuthnCodecs.javacom.yubico.webauthn.WebAuthnCodecsrawEcKeyToCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;119org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator23044com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/WebAuthnCodecs::rawEcKeyToCose +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;64org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator72com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;65org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator113com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::getAttestationType +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;67org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator164com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::getAttestationType +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifiergetDnField(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Ljava/util/Optional;262org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator5717com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with Optional.empty for com/yubico/webauthn/PackedAttestationStatementVerifier::getDnField +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$getDnField$5(Ljava/lang/String;Ljavax/naming/ldap/Rdn;)Z263org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator72com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$getDnField$5 +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$getDnField$5(Ljava/lang/String;Ljavax/naming/ldap/Rdn;)Z263org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator72com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$getDnField$5 +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifySelfAttestationSignature$0(J)Ljava/lang/IllegalArgumentException;124org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator145replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifySelfAttestationSignature$0 +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifySelfAttestationSignature$1(J)Ljava/lang/IllegalArgumentException;132org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator145replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifySelfAttestationSignature$1 +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cRequirements$6(Ljava/lang/Object;)Z285org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cRequirements$6(Ljava/lang/Object;)Z285org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator144replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cRequirements$6 +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cRequirements$7(Lcom/yubico/webauthn/data/ByteArray;[B)V297org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator142com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$2(Ljava/lang/Long;)Ljava/lang/IllegalArgumentException;200org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator145replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$2 +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$3(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;171org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator112com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$3(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;176org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator246com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$3(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;188org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5814com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$3(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;228org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator20356com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$3(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;229org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator22362com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$3(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;192org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7818removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$3(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;215org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator14637com.yubico.webauthn.RelyingPartyCeremoniesSpecremoved call to java/security/Signature::initVerify +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$3(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;221org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator17446com.yubico.webauthn.RelyingPartyCeremoniesSpecremoved call to java/security/Signature::update +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$3(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;228org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator23466com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced Boolean return with True for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$3 +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierlambda$verifyX5cSignature$4()Ljava/lang/IllegalArgumentException;247org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$4 +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z76org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator112com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z76org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator144com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z80org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator309com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z81org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator3711com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z83org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator4513com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z81org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator3711com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z83org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator4513com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifySelfAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z135org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator13531com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifySelfAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z152org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator20246com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifySelfAttestationSignature +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifySelfAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z152org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator20246com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifySelfAttestationSignature +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z269org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z303org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator13729com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z279org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7216com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z284org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator8920com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z288org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator12025com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z295org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator12927com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to java/util/Optional::ifPresent +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z302org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator15032com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cRequirements(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z305org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator15433com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cRequirements +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z167org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator518com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cSignature +PackedAttestationStatementVerifier.javacom.yubico.webauthn.PackedAttestationStatementVerifierverifyX5cSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z167org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator518com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cSignature +RegistrationResult.javacom.yubico.webauthn.RegistrationResult<init>(Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)V102org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +RegistrationResult.javacom.yubico.webauthn.RegistrationResultfromJson(Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)Lcom/yubico/webauthn/RegistrationResult;112org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.JsonIoSpecnegated conditional +RegistrationResult.javacom.yubico.webauthn.RegistrationResultfromJson(Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)Lcom/yubico/webauthn/RegistrationResult;116org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator143com.yubico.webauthn.data.JsonIoSpecnegated conditional +RegistrationResult.javacom.yubico.webauthn.RegistrationResultfromJson(Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)Lcom/yubico/webauthn/RegistrationResult;117org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator246com.yubico.webauthn.data.JsonIoSpecnegated conditional +RegistrationResult.javacom.yubico.webauthn.RegistrationResultfromJson(Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)Lcom/yubico/webauthn/RegistrationResult;118org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator4611com.yubico.webauthn.data.JsonIoSpecreplaced return value with null for com/yubico/webauthn/RegistrationResult::fromJson +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetAaguid()Lcom/yubico/webauthn/data/ByteArray;265org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator276com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/RegistrationResult::getAaguid +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetAttestationTrustPath()Ljava/util/Optional;388org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAttestationTrustPath +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetAttestationTrustPathJson()Ljava/util/Optional;393org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator112com.yubico.webauthn.data.JsonIoSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAttestationTrustPathJson +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetAuthenticatorAttachment()Ljava/util/Optional;217org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAuthenticatorAttachment +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetAuthenticatorExtensionOutputs()Ljava/util/Optional;340org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator133com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAuthenticatorExtensionOutputs +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetClientExtensionOutputs()Ljava/util/Optional;321org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator143com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getClientExtensionOutputs +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetKeyId()Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;248org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator299com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/RegistrationResult::getKeyId +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetParsedPublicKey()Ljava/security/PublicKey;303org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator62replaced return value with null for com/yubico/webauthn/RegistrationResult::getParsedPublicKey +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetPublicKeyCose()Lcom/yubico/webauthn/data/ByteArray;284org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator276com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/RegistrationResult::getPublicKeyCose +RegistrationResult.javacom.yubico.webauthn.RegistrationResultgetSignatureCount()J230org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator93com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced long return with 0 for com/yubico/webauthn/RegistrationResult::getSignatureCount +RegistrationResult.javacom.yubico.webauthn.RegistrationResultisBackedUp()Z203org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/RegistrationResult::isBackedUp +RegistrationResult.javacom.yubico.webauthn.RegistrationResultisBackedUp()Z203org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/RegistrationResult::isBackedUp +RegistrationResult.javacom.yubico.webauthn.RegistrationResultisBackupEligible()Z178org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/RegistrationResult::isBackupEligible +RegistrationResult.javacom.yubico.webauthn.RegistrationResultisBackupEligible()Z178org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/RegistrationResult::isBackupEligible +RegistrationResult.javacom.yubico.webauthn.RegistrationResultisDiscoverable()Ljava/util/Optional;366org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator153com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::isDiscoverable +RegistrationResult.javacom.yubico.webauthn.RegistrationResultisUserVerified()Z152org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/RegistrationResult::isUserVerified +RegistrationResult.javacom.yubico.webauthn.RegistrationResultisUserVerified()Z152org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/RegistrationResult::isUserVerified +RegistrationResult.javacom.yubico.webauthn.RegistrationResultlambda$fromJson$0(Ljava/lang/String;)Ljava/security/cert/X509Certificate;128org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.JsonIoSpecreplaced return value with null for com/yubico/webauthn/RegistrationResult::lambda$fromJson$0 +RegistrationResult.javacom.yubico.webauthn.RegistrationResultlambda$fromJson$1(Ljava/util/List;)Ljava/util/List;133org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator164com.yubico.webauthn.data.JsonIoSpecreplaced return value with Collections.emptyList for com/yubico/webauthn/RegistrationResult::lambda$fromJson$1 +RegistrationResult.javacom.yubico.webauthn.RegistrationResultlambda$getAttestationTrustPathJson$5(Ljava/security/cert/X509Certificate;)Ljava/lang/String;400org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator103com.yubico.webauthn.data.JsonIoSpecreplaced return value with "" for com/yubico/webauthn/RegistrationResult::lambda$getAttestationTrustPathJson$5 +RegistrationResult.javacom.yubico.webauthn.RegistrationResultlambda$getAttestationTrustPathJson$6(Ljava/util/List;)Ljava/util/List;405org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator164com.yubico.webauthn.data.JsonIoSpecreplaced return value with Collections.emptyList for com/yubico/webauthn/RegistrationResult::lambda$getAttestationTrustPathJson$6 +RegistrationResult.javacom.yubico.webauthn.RegistrationResultlambda$getClientExtensionOutputs$2(Lcom/yubico/webauthn/data/ClientRegistrationExtensionOutputs;)Z322org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +RegistrationResult.javacom.yubico.webauthn.RegistrationResultlambda$getClientExtensionOutputs$2(Lcom/yubico/webauthn/data/ClientRegistrationExtensionOutputs;)Z322org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator145replaced boolean return with true for com/yubico/webauthn/RegistrationResult::lambda$getClientExtensionOutputs$2 +RegistrationResult.javacom.yubico.webauthn.RegistrationResultlambda$isDiscoverable$3(Lcom/yubico/webauthn/data/ClientRegistrationExtensionOutputs;)Ljava/util/Optional;367org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator51com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::lambda$isDiscoverable$3 +RegistrationResult.javacom.yubico.webauthn.RegistrationResultlambda$isDiscoverable$4(Lcom/yubico/webauthn/data/Extensions$CredentialProperties$CredentialPropertiesOutput;)Ljava/util/Optional;368org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator51com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::lambda$isDiscoverable$4 +RelyingParty.javacom.yubico.webauthn.RelyingParty<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V366org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)negated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V368org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)negated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V369org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)negated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V370org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3810com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)negated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V371org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4813com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)negated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V380org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6616com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)negated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty_finishAssertion(Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/FinishAssertionSteps;576org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty::_finishAssertion +RelyingParty.javacom.yubico.webauthn.RelyingParty_finishRegistration(Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/FinishRegistrationSteps;518org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/RelyingParty::_finishRegistration +RelyingParty.javacom.yubico.webauthn.RelyingPartybuilder()Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages;580org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/RelyingParty::builder +RelyingParty.javacom.yubico.webauthn.RelyingPartyfilterAvailableAlgorithms(Ljava/util/List;)Ljava/util/List;420org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator195com.yubico.webauthn.RelyingPartyTest.logsWarningIfAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingParty::filterAvailableAlgorithms +RelyingParty.javacom.yubico.webauthn.RelyingPartyfinishAssertion(Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/AssertionResult;562org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty::finishAssertion +RelyingParty.javacom.yubico.webauthn.RelyingPartyfinishRegistration(Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/RegistrationResult;504org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/RelyingParty::finishRegistration +RelyingParty.javacom.yubico.webauthn.RelyingPartygenerateChallenge()Lcom/yubico/webauthn/data/ByteArray;408org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator100com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)removed call to java/security/SecureRandom::nextBytes +RelyingParty.javacom.yubico.webauthn.RelyingPartygenerateChallenge()Lcom/yubico/webauthn/data/ByteArray;409org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator172com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/RelyingParty::generateChallenge +RelyingParty.javacom.yubico.webauthn.RelyingPartylambda$filterAvailableAlgorithms$0(Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z471org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator12826com.yubico.webauthn.RelyingPartyTest.defaultSettingsLogWarningIfSomeAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)replaced boolean return with false for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 +RelyingParty.javacom.yubico.webauthn.RelyingPartylambda$filterAvailableAlgorithms$0(Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z451org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator7014com.yubico.webauthn.RelyingPartyTest.logsWarningIfAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest)replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 +RelyingParty.javacom.yubico.webauthn.RelyingPartylambda$filterAvailableAlgorithms$0(Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z459org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator9520replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 +RelyingParty.javacom.yubico.webauthn.RelyingPartylambda$filterAvailableAlgorithms$0(Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z468org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator12325replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 +RelyingParty.javacom.yubico.webauthn.RelyingPartylambda$startAssertion$1(Lcom/yubico/webauthn/StartAssertionOptions;)Ljava/util/Optional;530org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator183com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RelyingParty::lambda$startAssertion$1 +RelyingParty.javacom.yubico.webauthn.RelyingPartylambda$startAssertion$2(Ljava/lang/String;)Ljava/util/List;535org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator102com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Collections.emptyList for com/yubico/webauthn/RelyingParty::lambda$startAssertion$2 +RelyingParty.javacom.yubico.webauthn.RelyingPartystartAssertion(Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest;542org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator6420com.yubico.webauthn.RelyingPartyAssertionSpecremoved call to java/util/Optional::ifPresent +RelyingParty.javacom.yubico.webauthn.RelyingPartystartAssertion(Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest;544org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator8829com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty::startAssertion +RelyingParty.javacom.yubico.webauthn.RelyingPartystartRegistration(Lcom/yubico/webauthn/StartRegistrationOptions;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions;497org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator8023com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)removed call to java/util/Optional::ifPresent +RelyingParty.javacom.yubico.webauthn.RelyingPartystartRegistration(Lcom/yubico/webauthn/StartRegistrationOptions;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions;498org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator8525com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/RelyingParty::startRegistration +ByteArray.javacom.yubico.webauthn.data.ByteArray<init>([B)V54org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.data.ByteArrayTest.testEncodeBase64Url(com.yubico.webauthn.data.ByteArrayTest)negated conditional +ByteArray.javacom.yubico.webauthn.data.ByteArraycompareTo(Lcom/yubico/webauthn/data/ByteArray;)I147org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator313com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)changed conditional boundary +ByteArray.javacom.yubico.webauthn.data.ByteArraycompareTo(Lcom/yubico/webauthn/data/ByteArray;)I144org.pitest.mutationtest.engine.gregor.mutators.MathMutator181com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)Replaced integer subtraction with addition +ByteArray.javacom.yubico.webauthn.data.ByteArraycompareTo(Lcom/yubico/webauthn/data/ByteArray;)I149org.pitest.mutationtest.engine.gregor.mutators.MathMutator535com.yubico.webauthn.data.BuildersSpecReplaced integer subtraction with addition +ByteArray.javacom.yubico.webauthn.data.ByteArraycompareTo(Lcom/yubico/webauthn/data/ByteArray;)I143org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator90com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)negated conditional +ByteArray.javacom.yubico.webauthn.data.ByteArraycompareTo(Lcom/yubico/webauthn/data/ByteArray;)I147org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator313com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)negated conditional +ByteArray.javacom.yubico.webauthn.data.ByteArraycompareTo(Lcom/yubico/webauthn/data/ByteArray;)I148org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator424com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)negated conditional +ByteArray.javacom.yubico.webauthn.data.ByteArraycompareTo(Lcom/yubico/webauthn/data/ByteArray;)I144org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator191com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)replaced int return with 0 for com/yubico/webauthn/data/ByteArray::compareTo +ByteArray.javacom.yubico.webauthn.data.ByteArraycompareTo(Lcom/yubico/webauthn/data/ByteArray;)I149org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator545com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest)replaced int return with 0 for com/yubico/webauthn/data/ByteArray::compareTo +ByteArray.javacom.yubico.webauthn.data.ByteArrayconcat(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;100org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +ByteArray.javacom.yubico.webauthn.data.ByteArrayconcat(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;101org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator295com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/ByteArray::concat +ByteArray.javacom.yubico.webauthn.data.ByteArrayfromBase64(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;69org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.ByteArrayTest.codecMimeTest(com.yubico.webauthn.data.ByteArrayTest)negated conditional +ByteArray.javacom.yubico.webauthn.data.ByteArrayfromBase64(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;70org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.data.ByteArrayTest.codecMimeTest(com.yubico.webauthn.data.ByteArrayTest)replaced return value with null for com/yubico/webauthn/data/ByteArray::fromBase64 +ByteArray.javacom.yubico.webauthn.data.ByteArrayfromBase64Url(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;79org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.ByteArrayTest.decodeBadAlphabetTest(com.yubico.webauthn.data.ByteArrayTest)negated conditional +ByteArray.javacom.yubico.webauthn.data.ByteArrayfromBase64Url(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;80org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator215com.yubico.webauthn.data.ByteArrayTest.decodeTest(com.yubico.webauthn.data.ByteArrayTest)replaced return value with null for com/yubico/webauthn/data/ByteArray::fromBase64Url +ByteArray.javacom.yubico.webauthn.data.ByteArrayfromHex(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;88org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.ByteArrayTest.decodeBadHexLengthTest(com.yubico.webauthn.data.ByteArrayTest)negated conditional +ByteArray.javacom.yubico.webauthn.data.ByteArrayfromHex(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;90org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest)replaced return value with null for com/yubico/webauthn/data/ByteArray::fromHex +ByteArray.javacom.yubico.webauthn.data.ByteArraygetBase64()Ljava/lang/String;123org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator71com.yubico.webauthn.data.ByteArrayTest.codecMimeTest(com.yubico.webauthn.data.ByteArrayTest)replaced return value with "" for com/yubico/webauthn/data/ByteArray::getBase64 +ByteArray.javacom.yubico.webauthn.data.ByteArraygetBase64Url()Ljava/lang/String;130org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50com.yubico.webauthn.data.ByteArrayTest.testEncodeBase64Url(com.yubico.webauthn.data.ByteArrayTest)replaced return value with "" for com/yubico/webauthn/data/ByteArray::getBase64Url +ByteArray.javacom.yubico.webauthn.data.ByteArraygetBytes()[B116org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.ByteArrayTest.decodeTest(com.yubico.webauthn.data.ByteArrayTest)replaced return value with null for com/yubico/webauthn/data/ByteArray::getBytes +ByteArray.javacom.yubico.webauthn.data.ByteArraygetHex()Ljava/lang/String;138org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.AuthenticatorDataSpecreplaced return value with "" for com/yubico/webauthn/data/ByteArray::getHex +ByteArray.javacom.yubico.webauthn.data.ByteArrayisEmpty()Z105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest)negated conditional +ByteArray.javacom.yubico.webauthn.data.ByteArrayisEmpty()Z105org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator134com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest)replaced boolean return with true for com/yubico/webauthn/data/ByteArray::isEmpty +ByteArray.javacom.yubico.webauthn.data.ByteArraysize()I109org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator60com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest)replaced int return with 0 for com/yubico/webauthn/data/ByteArray::size +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z564org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z564org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator114com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z566org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator176com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z566org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator2410com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z581org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10333negated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z609org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator21560negated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z578org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator8226com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to java/security/cert/PKIXParameters::setDate +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z579org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator9129com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to java/security/cert/PKIXParameters::setRevocationEnabled +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z580org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator11236removed call to java/security/cert/PKIXParameters::setPolicyQualifiersRejected +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z582org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator12540com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to java/util/Optional::ifPresent +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z585org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator16248com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z567org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator3011com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z585org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator16248com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z615org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator23565replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z622org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator25971replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21attestationTrusted()Z635org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator28876com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21lambda$attestationTrusted$0(Ljava/security/cert/X509Certificate;)Ljava/security/cert/TrustAnchor;576org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$0 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21lambda$attestationTrusted$1(Ljava/security/cert/PKIXCertPathValidatorResult;Ljava/util/function/Predicate;)Ljava/lang/Boolean;590org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator72com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21lambda$attestationTrusted$1(Ljava/security/cert/PKIXCertPathValidatorResult;Ljava/util/function/Predicate;)Ljava/lang/Boolean;591org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator124com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced Boolean return with False for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$1 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21lambda$attestationTrusted$1(Ljava/security/cert/PKIXCertPathValidatorResult;Ljava/util/function/Predicate;)Ljava/lang/Boolean;596org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator3311com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced Boolean return with True for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$1 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step22;560org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator141com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step21::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21validate()V554org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21validate()V554org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator112com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step21validate()V553org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator265com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetAppidExclude()Ljava/util/Optional;97org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/RegistrationExtensionInputs::getAppidExclude +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetCredProps()Z109org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetCredProps()Z109org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator92com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetCredProps()Z109org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator175com.yubico.webauthn.data.ExtensionsSpecreplaced boolean return with true for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredProps +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetCredPropsJson()Ljava/lang/Boolean;115org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetCredPropsJson()Ljava/lang/Boolean;115org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator145com.yubico.webauthn.data.ExtensionsSpecreplaced Boolean return with False for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredPropsJson +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetCredPropsJson()Ljava/lang/Boolean;115org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator145com.yubico.webauthn.data.ExtensionsSpecreplaced Boolean return with True for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredPropsJson +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetExtensionIds()Ljava/util/Set;158org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator111com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetExtensionIds()Ljava/util/Set;161org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator235com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetExtensionIds()Ljava/util/Set;164org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator358com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetExtensionIds()Ljava/util/Set;167org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4712com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetExtensionIds()Ljava/util/Set;170org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator5916com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Collections.emptySet for com/yubico/webauthn/data/RegistrationExtensionInputs::getExtensionIds +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetLargeBlob()Ljava/util/Optional;130org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/RegistrationExtensionInputs::getLargeBlob +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetUvm()Z141org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetUvm()Z141org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator92com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetUvm()Z141org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator175com.yubico.webauthn.data.ExtensionsSpecreplaced boolean return with true for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvm +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetUvmJson()Ljava/lang/Boolean;147org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.data.ExtensionsSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetUvmJson()Ljava/lang/Boolean;147org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator145com.yubico.webauthn.data.ExtensionsSpecreplaced Boolean return with False for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvmJson +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsgetUvmJson()Ljava/lang/Boolean;147org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator145com.yubico.webauthn.data.ExtensionsSpecreplaced Boolean return with True for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvmJson +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsmerge(Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs;82org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator90com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsmerge(Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs;83org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator223com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsmerge(Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs;84org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator356negated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsmerge(Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs;85org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator489com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputsmerge(Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs;81org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator6113com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs::merge +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6<init>(Lcom/yubico/webauthn/FinishAssertionSteps;)V214org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6111com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6<init>(Lcom/yubico/webauthn/FinishAssertionSteps;)V214org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6513com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6lambda$new$0(Lcom/yubico/webauthn/UsernameRepository;)Ljava/util/Optional;205org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator112com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$0 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6lambda$new$1()Ljava/util/Optional;204org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator92com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$1 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6lambda$new$2(Lcom/yubico/webauthn/FinishAssertionSteps;Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;211org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$2 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6lambda$new$3()Ljava/util/Optional;211org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator91replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$3 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6lambda$new$4(Lcom/yubico/webauthn/FinishAssertionSteps;Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;220org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$4 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6lambda$new$5()Ljava/util/Optional;220org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator91com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$5 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6lambda$new$6(Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;223org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator124com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$6 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step7;228org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator162com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step6::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V234org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator103com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V234org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator156com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V241org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4913com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V241org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5315com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V249org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator9322com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V249org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator9724com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V266org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator20046com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V233org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator309removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V237org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4311removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V242org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator8721com.yubico.webauthn.RelyingPartyAssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V250org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator13931com.yubico.webauthn.RelyingPartyAssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V258org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator15635com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V260org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator19343com.yubico.webauthn.RelyingPartyAssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step6validate()V267org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator22149removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiergetAttestationCertificate(Lcom/yubico/webauthn/data/AttestationObject;)Ljava/security/cert/X509Certificate;52org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator173com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationCertificate +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;108org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator122com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;109org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator174com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;111org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator339com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;114org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator3710com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationType +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;116org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator4211com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationType +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiergetRawUserPublicKey(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/ByteArray;100org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator7620com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getRawUserPublicKey +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierlambda$getAttestationCertificate$0(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;55org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator83com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierlambda$getAttestationCertificate$0(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;56org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator167com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierlambda$getAttestationCertificate$0(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;57org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator208com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$getAttestationCertificate$0 +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierlambda$getAttestationCertificate$1()Ljava/lang/IllegalArgumentException;65org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$getAttestationCertificate$1 +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierlambda$verifyAttestationSignature$2(Lcom/yubico/webauthn/data/AttestationObject;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestedCredentialData;)Ljava/lang/Boolean;146org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator112com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierlambda$verifyAttestationSignature$2(Lcom/yubico/webauthn/data/AttestationObject;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestedCredentialData;)Ljava/lang/Boolean;151org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator246com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierlambda$verifyAttestationSignature$2(Lcom/yubico/webauthn/data/AttestationObject;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestedCredentialData;)Ljava/lang/Boolean;185org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator12727com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced Boolean return with False for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$2 +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierlambda$verifyAttestationSignature$2(Lcom/yubico/webauthn/data/AttestationObject;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestedCredentialData;)Ljava/lang/Boolean;185org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator12727com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced Boolean return with True for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$2 +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierlambda$verifyAttestationSignature$3()Ljava/lang/IllegalArgumentException;194org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$3 +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiervalidSelfSignature(Ljava/security/cert/X509Certificate;)Z71org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator61removed call to java/security/cert/X509Certificate::verify +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiervalidSelfSignature(Ljava/security/cert/X509Certificate;)Z72org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator112com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::validSelfSignature +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifiervalidSelfSignature(Ljava/security/cert/X509Certificate;)Z74org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator193replaced boolean return with true for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::validSelfSignature +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z132org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator388com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z133org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4612com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z141org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator8220com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with false for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::verifyAttestationSignature +FidoU2fAttestationStatementVerifier.javacom.yubico.webauthn.FidoU2fAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z141org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator8220com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::verifyAttestationSignature +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorData<init>(Lcom/yubico/webauthn/data/ByteArray;)V104org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator205com.yubico.webauthn.data.AttestationObjectSpecchanged conditional boundary +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorData<init>(Lcom/yubico/webauthn/data/ByteArray;)V102org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorData<init>(Lcom/yubico/webauthn/data/ByteArray;)V104org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator205com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorData<init>(Lcom/yubico/webauthn/data/ByteArray;)V117org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8816com.yubico.webauthn.data.AttestationObjectSpecnegated conditional +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorData<init>(Lcom/yubico/webauthn/data/ByteArray;)V123org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator12422com.yubico.webauthn.data.AttestationObjectSpecnegated conditional +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorData<init>(Lcom/yubico/webauthn/data/ByteArray;)V103org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator6213com.yubico.webauthn.data.AuthenticatorDataSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDatagetAttestedCredentialData()Ljava/util/Optional;246org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.AuthenticatorDataSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorData::getAttestedCredentialData +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDatagetExtensions()Ljava/util/Optional;259org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator82com.yubico.webauthn.data.AuthenticatorDataSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorData::getExtensions +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDatagetRpIdHash()Lcom/yubico/webauthn/data/ByteArray;137org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator123com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorData::getRpIdHash +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDatagetSignatureCounter()J142org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator103com.yubico.webauthn.data.AuthenticatorDataSpecreplaced long return with 0 for com/yubico/webauthn/data/AuthenticatorData::getSignatureCounter +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;153org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator220com.yubico.webauthn.data.AuthenticatorDataSpecchanged conditional boundary +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;177org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator12717changed conditional boundary +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;192org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator18428com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecchanged conditional boundary +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;172org.pitest.mutationtest.engine.gregor.mutators.MathMutator11117com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecReplaced integer addition with subtraction +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;153org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator220com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;177org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator12717com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;192org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator18428com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;193org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator18929com.yubico.webauthn.data.AuthenticatorDataSpecnegated conditional +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;206org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator23639com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;153org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator576com.yubico.webauthn.data.AuthenticatorDataSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;177org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator16223com.yubico.webauthn.data.AuthenticatorDataSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseAttestedCredentialData(Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult;214org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator29455com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorData::parseAttestedCredentialData +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorDataparseExtensions([B)Lcom/upokecenter/cbor/CBORObject;226org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.AuthenticatorDataSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorData::parseExtensions +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V372org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V374org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V376org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V377org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3810com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V378org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4813com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V387org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6616com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2_finishAssertion(Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/FinishAssertionSteps;548org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2::_finishAssertion +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2_finishRegistration(Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/FinishRegistrationSteps;477org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2::_finishRegistration +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2builder(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/CredentialRepositoryV2;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;553org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator163com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2::builder +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2filterAvailableAlgorithms(Ljava/util/List;)Ljava/util/List;428org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator51com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Collections.emptyList for com/yubico/webauthn/RelyingPartyV2::filterAvailableAlgorithms +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2finishAssertion(Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/AssertionResultV2;534org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2::finishAssertion +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2finishRegistration(Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/RegistrationResult;463org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2::finishRegistration +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2generateChallenge()Lcom/yubico/webauthn/data/ByteArray;416org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator100com.yubico.webauthn.RelyingPartyStartOperationSpecremoved call to java/security/SecureRandom::nextBytes +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2generateChallenge()Lcom/yubico/webauthn/data/ByteArray;417org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator172com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2::generateChallenge +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2lambda$startAssertion$0(Lcom/yubico/webauthn/StartAssertionOptions;Lcom/yubico/webauthn/UsernameRepository;)Ljava/util/Optional;497org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator173com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$0 +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2lambda$startAssertion$1(Lcom/yubico/webauthn/StartAssertionOptions;)Ljava/util/Optional;494org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator132com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$1 +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2lambda$startAssertion$2(Ljava/util/Set;)Ljava/util/List;507org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator164com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Collections.emptyList for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$2 +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2startAssertion(Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest;481org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2startAssertion(Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest;481org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator93com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2startAssertion(Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest;514org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator8928com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to java/util/Optional::ifPresent +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2startAssertion(Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest;516org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator11337com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2::startAssertion +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2startRegistration(Lcom/yubico/webauthn/StartRegistrationOptions;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions;456org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator9227com.yubico.webauthn.RelyingPartyStartOperationSpecremoved call to java/util/Optional::ifPresent +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2startRegistration(Lcom/yubico/webauthn/StartRegistrationOptions;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions;457org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator9729com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2::startRegistration +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisAllowed(Ljava/lang/String;Ljava/util/Set;ZZ)Z26org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator699com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with false for com/yubico/webauthn/OriginMatcher::isAllowed +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisAllowed(Ljava/lang/String;Ljava/util/Set;ZZ)Z26org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator699com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with true for com/yubico/webauthn/OriginMatcher::isAllowed +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisDomainAccepted(ZLjava/net/URL;Ljava/net/URL;)Z68org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator142com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisDomainAccepted(ZLjava/net/URL;Ljava/net/URL;)Z69org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator204com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisDomainAccepted(ZLjava/net/URL;Ljava/net/URL;)Z69org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3110com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisDomainAccepted(ZLjava/net/URL;Ljava/net/URL;)Z71org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator4815com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with false for com/yubico/webauthn/OriginMatcher::isDomainAccepted +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisDomainAccepted(ZLjava/net/URL;Ljava/net/URL;)Z69org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator4113com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with true for com/yubico/webauthn/OriginMatcher::isDomainAccepted +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisDomainAccepted(ZLjava/net/URL;Ljava/net/URL;)Z71org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator4815com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with true for com/yubico/webauthn/OriginMatcher::isDomainAccepted +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisPortAccepted(ZLjava/net/URL;Ljava/net/URL;)Z57org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisPortAccepted(ZLjava/net/URL;Ljava/net/URL;)Z60org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator164com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisPortAccepted(ZLjava/net/URL;Ljava/net/URL;)Z58org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator81com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with false for com/yubico/webauthn/OriginMatcher::isPortAccepted +OriginMatcher.javacom.yubico.webauthn.OriginMatcherisPortAccepted(ZLjava/net/URL;Ljava/net/URL;)Z60org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator247com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with true for com/yubico/webauthn/OriginMatcher::isPortAccepted +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z29org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z32org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator224com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z32org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator245com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z32org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator266com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z48org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8116com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z48org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8317com.yubico.webauthn.OriginMatcherSpecnegated conditional +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z31org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator173com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with false for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z40org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator5110com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z48org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator9120com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 +OriginMatcher.javacom.yubico.webauthn.OriginMatcherlambda$isAllowed$0(Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z51org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator10322com.yubico.webauthn.OriginMatcherSpecreplaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputs<init>(Lcom/yubico/webauthn/extension/appid/AppId;Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;Ljava/lang/Boolean;)V67org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator191com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest)negated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputs<init>(Lcom/yubico/webauthn/extension/appid/AppId;Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;Ljava/lang/Boolean;)V67org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator223com.yubico.webauthn.data.ExtensionsSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetAppid()Ljava/util/Optional;210org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AssertionExtensionInputs::getAppid +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetExtensionIds()Ljava/util/Set;92org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator111com.yubico.webauthn.data.ExtensionsSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetExtensionIds()Ljava/util/Set;95org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator234com.yubico.webauthn.data.ExtensionsSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetExtensionIds()Ljava/util/Set;98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator358com.yubico.webauthn.data.ExtensionsSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetExtensionIds()Ljava/util/Set;101org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator4611com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Collections.emptySet for com/yubico/webauthn/data/AssertionExtensionInputs::getExtensionIds +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetLargeBlob()Ljava/util/Optional;225org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AssertionExtensionInputs::getLargeBlob +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetLargeBlobJson()Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;231org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50com.yubico.webauthn.data.ExtensionsSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetLargeBlobJson()Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;231org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator92com.yubico.webauthn.data.ExtensionsSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetLargeBlobJson()Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;231org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator145com.yubico.webauthn.data.ExtensionsSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetUvm()Z244org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50com.yubico.webauthn.data.AuthenticatorDataSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetUvm()Z244org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator92com.yubico.webauthn.data.ExtensionsSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetUvm()Z244org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator175com.yubico.webauthn.data.ExtensionsSpecreplaced boolean return with true for com/yubico/webauthn/data/AssertionExtensionInputs::getUvm +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetUvmJson()Ljava/lang/Boolean;250org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.data.ExtensionsSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetUvmJson()Ljava/lang/Boolean;250org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator145com.yubico.webauthn.data.ExtensionsSpecreplaced Boolean return with False for com/yubico/webauthn/data/AssertionExtensionInputs::getUvmJson +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsgetUvmJson()Ljava/lang/Boolean;250org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator145com.yubico.webauthn.data.ExtensionsSpecreplaced Boolean return with True for com/yubico/webauthn/data/AssertionExtensionInputs::getUvmJson +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsmerge(Lcom/yubico/webauthn/data/AssertionExtensionInputs;)Lcom/yubico/webauthn/data/AssertionExtensionInputs;79org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator90com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsmerge(Lcom/yubico/webauthn/data/AssertionExtensionInputs;)Lcom/yubico/webauthn/data/AssertionExtensionInputs;80org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator223negated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsmerge(Lcom/yubico/webauthn/data/AssertionExtensionInputs;)Lcom/yubico/webauthn/data/AssertionExtensionInputs;81org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator356negated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputsmerge(Lcom/yubico/webauthn/data/AssertionExtensionInputs;)Lcom/yubico/webauthn/data/AssertionExtensionInputs;78org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator4810com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs::merge +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;37org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getAttestationType +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifiergetResponseBytes(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/ByteArray;94org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator112com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifiergetResponseBytes(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/ByteArray;94org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator144com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifiergetResponseBytes(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/ByteArray;101org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator3913com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getResponseBytes +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifiergetX5cArray(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/fasterxml/jackson/databind/JsonNode;47org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator4615com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getX5cArray +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierparseJws(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;88org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator174com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::parseJws +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z55org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator112com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z55org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator144com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z63org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4113com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z73org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator10126com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z79org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator12330com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z84org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator12731com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyAttestationSignature +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z64org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator4514com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyAttestationSignature +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyHostname(Ljava/security/cert/X509Certificate;)Z193org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator60com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to org/apache/hc/client5/http/ssl/DefaultHostnameVerifier::verify +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyHostname(Ljava/security/cert/X509Certificate;)Z194org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator111com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyHostname +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifyHostname(Ljava/security/cert/X509Certificate;)Z196org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator192com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyHostname +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifySignature(Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z123org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4913com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to java/security/Signature::initVerify +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifySignature(Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z129org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7823com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to java/security/Signature::update +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifySignature(Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z136org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator11632com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifySignature(Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z142org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator12536com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifySignature +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifierverifySignature(Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z142org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator12536com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifySignature +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptor<init>(Lcom/yubico/webauthn/data/PublicKeyCredentialType;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V74org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptor<init>(Lcom/yubico/webauthn/data/PublicKeyCredentialType;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V75org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptor<init>(Lcom/yubico/webauthn/data/PublicKeyCredentialType;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V80org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator417com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorbuilder()Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder$MandatoryStages;110org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::builder +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I86org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator121com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I90org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator254com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I94org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator409com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I94org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4412com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I96org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5516com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I96org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5919com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator7023com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator7426com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I101org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator9232com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I87org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator162com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I91org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator336replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I95org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator4813replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I97org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator6320replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorcompareTo(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I102org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator9633com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptorgetTransports()Ljava/util/Optional;168org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::getTransports +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptortoPublicKeyCredentialDescriptor()Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;122org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::toPublicKeyCredentialDescriptor +Extensions.javacom.yubico.webauthn.data.Extensions$Uvmlambda$parseAuthenticatorExtensionOutput$0(Lcom/upokecenter/cbor/CBORObject;)Lcom/yubico/webauthn/data/Extensions$Uvm$UvmEntry;482org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator3512com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with null for com/yubico/webauthn/data/Extensions$Uvm::lambda$parseAuthenticatorExtensionOutput$0 +Extensions.javacom.yubico.webauthn.data.Extensions$UvmparseAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional;477org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$UvmparseAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional;478org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator279com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$Uvm::parseAuthenticatorExtensionOutput +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z508org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator4611changed conditional boundary +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z508org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator5013changed conditional boundary +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z495org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z500org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator235com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z508org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4611com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z508org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5013com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z517org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator9026com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z522org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10832com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z528org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator14145com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z528org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator14548com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z535org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator17055com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with false for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z496org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator102replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z505org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator399replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z513org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator6818replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z519org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator10130replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z524org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator12037replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput +Extensions.javacom.yubico.webauthn.data.Extensions$UvmvalidateAuthenticatorExtensionOutput(Lcom/upokecenter/cbor/CBORObject;)Z530org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator15752replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuildertimeout(J)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;363org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator83com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuildertimeout(Ljava/lang/Long;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;371org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;345org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator227com.yubico.webauthn.RelyingPartyStartOperationSpecchanged conditional boundary +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;344org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)negated conditional +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;345org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator154com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;345org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator227com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)negated conditional +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;349org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator5016com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderuserHandle(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;298org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userHandle +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderuserHandle(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;263org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderuserHandle(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;265org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator235com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderuserHandle(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;268org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator337com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userHandle +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderuserVerification(Lcom/yubico/webauthn/data/UserVerificationRequirement;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;331org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userVerification +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderuserVerification(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;313org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)negated conditional +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderuserVerification(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;315org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator224com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userVerification +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderusername(Ljava/lang/String;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;232org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::username +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderusername(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;197org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)negated conditional +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderusername(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;199org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator235com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilderusername(Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder;202org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator337com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest)replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::username +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V133org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)negated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V134org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)negated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V135org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)negated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V136org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3810com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)negated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V149org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator7714com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)negated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V153org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10218com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions<init>(Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V155org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator11721com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionsbuilder()Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages;232org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::builder +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionsfilterAvailableAlgorithms(Ljava/util/List;)Ljava/util/List;368org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator195com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)replaced return value with Collections.emptyList for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::filterAvailableAlgorithms +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionsfromJson(Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions;216org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.data.JsonIoSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::fromJson +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionsgetAuthenticatorSelection()Ljava/util/Optional;228org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getAuthenticatorSelection +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionsgetExcludeCredentials()Ljava/util/Optional;224org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getExcludeCredentials +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionsgetTimeout()Ljava/util/Optional;220org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getTimeout +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionslambda$filterAvailableAlgorithms$0(Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z447org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator19140com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)replaced boolean return with false for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionslambda$filterAvailableAlgorithms$0(Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z399org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator7014com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionslambda$filterAvailableAlgorithms$0(Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z444org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator18639replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionstoCredentialsCreateJson()Ljava/lang/String;179org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator245com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::toCredentialsCreateJson +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptionstoJson()Ljava/lang/String;199org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator62com.yubico.webauthn.data.JsonIoSpecreplaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::toJson +AssertionResult.javacom.yubico.webauthn.AssertionResult<init>(ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/RegisteredCredential;Ljava/lang/String;Z)V104org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionResult.javacom.yubico.webauthn.AssertionResult<init>(ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/RegisteredCredential;Ljava/lang/String;Z)V107org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionResult.javacom.yubico.webauthn.AssertionResult<init>(ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/RegisteredCredential;Ljava/lang/String;Z)V108org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionResult.javacom.yubico.webauthn.AssertionResultgetAuthenticatorAttachment()Ljava/util/Optional;231org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyAssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getAuthenticatorAttachment +AssertionResult.javacom.yubico.webauthn.AssertionResultgetAuthenticatorExtensionOutputs()Ljava/util/Optional;281org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator133com.yubico.webauthn.RelyingPartyAssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getAuthenticatorExtensionOutputs +AssertionResult.javacom.yubico.webauthn.AssertionResultgetClientExtensionOutputs()Ljava/util/Optional;262org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator143com.yubico.webauthn.RelyingPartyAssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getClientExtensionOutputs +AssertionResult.javacom.yubico.webauthn.AssertionResultgetCredentialId()Lcom/yubico/webauthn/data/ByteArray;130org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyAssertionSpecreplaced return value with null for com/yubico/webauthn/AssertionResult::getCredentialId +AssertionResult.javacom.yubico.webauthn.AssertionResultgetSignatureCount()J244org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator93com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced long return with 0 for com/yubico/webauthn/AssertionResult::getSignatureCount +AssertionResult.javacom.yubico.webauthn.AssertionResultgetUserHandle()Lcom/yubico/webauthn/data/ByteArray;146org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyAssertionSpecreplaced return value with null for com/yubico/webauthn/AssertionResult::getUserHandle +AssertionResult.javacom.yubico.webauthn.AssertionResultisBackedUp()Z217org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyAssertionSpecreplaced boolean return with false for com/yubico/webauthn/AssertionResult::isBackedUp +AssertionResult.javacom.yubico.webauthn.AssertionResultisBackedUp()Z217org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyAssertionSpecreplaced boolean return with true for com/yubico/webauthn/AssertionResult::isBackedUp +AssertionResult.javacom.yubico.webauthn.AssertionResultisBackupEligible()Z192org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyAssertionSpecreplaced boolean return with false for com/yubico/webauthn/AssertionResult::isBackupEligible +AssertionResult.javacom.yubico.webauthn.AssertionResultisBackupEligible()Z192org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyAssertionSpecreplaced boolean return with true for com/yubico/webauthn/AssertionResult::isBackupEligible +AssertionResult.javacom.yubico.webauthn.AssertionResultisUserVerified()Z165org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyAssertionSpecreplaced boolean return with false for com/yubico/webauthn/AssertionResult::isUserVerified +AssertionResult.javacom.yubico.webauthn.AssertionResultisUserVerified()Z165org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyAssertionSpecreplaced boolean return with true for com/yubico/webauthn/AssertionResult::isUserVerified +AssertionResult.javacom.yubico.webauthn.AssertionResultlambda$getClientExtensionOutputs$0(Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs;)Z263org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.webauthn.RelyingPartyAssertionSpecnegated conditional +AssertionResult.javacom.yubico.webauthn.AssertionResultlambda$getClientExtensionOutputs$0(Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs;)Z263org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator145replaced boolean return with true for com/yubico/webauthn/AssertionResult::lambda$getClientExtensionOutputs$0 +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V112org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator141com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V114org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator244com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V115org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator347com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V91org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V93org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V94org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V95org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3810com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V95org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4011com.yubico.webauthn.data.JsonIoSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5214com.yubico.webauthn.data.JsonIoSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5415com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5817com.yubico.webauthn.data.JsonIoSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V103org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8421com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredentialbuilder()Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages;144org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::builder +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredentialgetAuthenticatorAttachment()Ljava/util/Optional;139org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.JsonIoSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredential::getAuthenticatorAttachment +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredentialparseAssertionResponseJson(Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredential;290org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator143com.yubico.webauthn.data.ExtensionsSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::parseAssertionResponseJson +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredentialparseRegistrationResponseJson(Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredential;235org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator143com.yubico.webauthn.data.ExtensionsSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::parseRegistrationResponseJson +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V93org.pitest.mutationtest.engine.gregor.mutators.MathMutator151com.yubico.webauthn.data.AuthenticatorDataFlagsSpecReplaced bitwise AND with OR +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V94org.pitest.mutationtest.engine.gregor.mutators.MathMutator304com.yubico.webauthn.data.AuthenticatorDataFlagsSpecReplaced bitwise AND with OR +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V95org.pitest.mutationtest.engine.gregor.mutators.MathMutator457com.yubico.webauthn.data.AuthenticatorDataFlagsSpecReplaced bitwise AND with OR +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V96org.pitest.mutationtest.engine.gregor.mutators.MathMutator6010com.yubico.webauthn.data.AuthenticatorDataFlagsSpecReplaced bitwise AND with OR +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V97org.pitest.mutationtest.engine.gregor.mutators.MathMutator7513com.yubico.webauthn.data.AuthenticatorDataFlagsSpecReplaced bitwise AND with OR +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V98org.pitest.mutationtest.engine.gregor.mutators.MathMutator9016com.yubico.webauthn.data.AuthenticatorDataFlagsSpecReplaced bitwise AND with OR +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V93org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator161com.yubico.webauthn.data.AuthenticatorDataFlagsSpecnegated conditional +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V94org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator314com.yubico.webauthn.data.AuthenticatorDataFlagsSpecnegated conditional +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V95org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator467com.yubico.webauthn.data.AuthenticatorDataFlagsSpecnegated conditional +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V96org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6110com.yubico.webauthn.data.AuthenticatorDataFlagsSpecnegated conditional +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V97org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator7613com.yubico.webauthn.data.AuthenticatorDataFlagsSpecnegated conditional +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator9116com.yubico.webauthn.data.AuthenticatorDataFlagsSpecnegated conditional +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V100org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10419com.yubico.webauthn.data.AuthenticatorDataFlagsSpecnegated conditional +AuthenticatorDataFlags.javacom.yubico.webauthn.data.AuthenticatorDataFlags<init>(B)V100org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10720com.yubico.webauthn.data.AuthenticatorDataFlagsSpecnegated conditional +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2<init>(ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/CredentialRecord;Z)V103org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2<init>(ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/CredentialRecord;Z)V106org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2getAuthenticatorAttachment()Ljava/util/Optional;193org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getAuthenticatorAttachment +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2getAuthenticatorExtensionOutputs()Ljava/util/Optional;243org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator133com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getAuthenticatorExtensionOutputs +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2getClientExtensionOutputs()Ljava/util/Optional;224org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator143com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getClientExtensionOutputs +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2getSignatureCount()J206org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator93com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced long return with 0 for com/yubico/webauthn/AssertionResultV2::getSignatureCount +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2isBackedUp()Z179org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isBackedUp +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2isBackedUp()Z179org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isBackedUp +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2isBackupEligible()Z155org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isBackupEligible +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2isBackupEligible()Z155org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isBackupEligible +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2isUserVerified()Z130org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isUserVerified +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2isUserVerified()Z130org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isUserVerified +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2lambda$getClientExtensionOutputs$0(Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs;)Z225org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +AssertionResultV2.javacom.yubico.webauthn.AssertionResultV2lambda$getClientExtensionOutputs$0(Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs;)Z225org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator145replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::lambda$getClientExtensionOutputs$0 +Crypto.javacom.yubico.webauthn.CryptoisP256(Ljava/security/spec/ECParameterSpec;)Z67org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator72com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with false for com/yubico/webauthn/Crypto::isP256 +Crypto.javacom.yubico.webauthn.CryptoisP256(Ljava/security/spec/ECParameterSpec;)Z67org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator72com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/Crypto::isP256 +Crypto.javacom.yubico.webauthn.Cryptosha1(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;114org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator114com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/Crypto::sha1 +Crypto.javacom.yubico.webauthn.Cryptosha256(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;98org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator115com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/Crypto::sha256 +Crypto.javacom.yubico.webauthn.Cryptosha256(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;110org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator103com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/Crypto::sha256 +Crypto.javacom.yubico.webauthn.Cryptosha384(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;102org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator115com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/Crypto::sha384 +Crypto.javacom.yubico.webauthn.Cryptosha512(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;106org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator115com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/Crypto::sha512 +Crypto.javacom.yubico.webauthn.CryptoverifySignature(Ljava/security/PublicKey;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z85org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator112com.yubico.webauthn.RelyingPartyUserIdentificationSpecremoved call to java/security/Signature::initVerify +Crypto.javacom.yubico.webauthn.CryptoverifySignature(Ljava/security/PublicKey;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z86org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator174com.yubico.webauthn.RelyingPartyUserIdentificationSpecremoved call to java/security/Signature::update +Crypto.javacom.yubico.webauthn.CryptoverifySignature(Ljava/security/PublicKey;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z87org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator257com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced boolean return with false for com/yubico/webauthn/Crypto::verifySignature +Crypto.javacom.yubico.webauthn.CryptoverifySignature(Ljava/security/PublicKey;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z87org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator257com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with true for com/yubico/webauthn/Crypto::verifySignature +Crypto.javacom.yubico.webauthn.CryptoverifySignature(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z75org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator92com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with false for com/yubico/webauthn/Crypto::verifySignature +Crypto.javacom.yubico.webauthn.CryptoverifySignature(Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z75org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator92com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/Crypto::verifySignature +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19attestationTrustPath()Ljava/util/Optional;459org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19attestationTrustPath()Ljava/util/Optional;461org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator183com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19attestationTrustPath()Ljava/util/Optional;463org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator305com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationTrustPath +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19attestationType()Lcom/yubico/webauthn/data/AttestationType;442org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19attestationType()Lcom/yubico/webauthn/data/AttestationType;445org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator359negated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19attestationType()Lcom/yubico/webauthn/data/AttestationType;443org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator174com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19attestationType()Lcom/yubico/webauthn/data/AttestationType;448org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator4712com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19attestationType()Lcom/yubico/webauthn/data/AttestationType;450org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator5313com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19lambda$validate$0(Lcom/yubico/webauthn/AttestationStatementVerifier;)V427org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator161com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step20;437org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator143com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19validate()V432org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator122com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19validate()V425org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator70com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to java/util/Optional::ifPresent +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step19validate()V432org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator235removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$0(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/Boolean;48org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$0(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/Boolean;49org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator113replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$0 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$1()Ljava/lang/IllegalArgumentException;57org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with null for com/yubico/webauthn/TokenBindingValidator::lambda$validate$1 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$2(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/TokenBindingInfo;)Ljava/lang/Boolean;45org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator266replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$2 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$2(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/TokenBindingInfo;)Ljava/lang/Boolean;45org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator266replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$2 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$3()Ljava/lang/IllegalArgumentException;65org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with null for com/yubico/webauthn/TokenBindingValidator::lambda$validate$3 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$4(Ljava/util/Optional;Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/Boolean;63org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator142replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$4 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$4(Ljava/util/Optional;Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/Boolean;63org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator142replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$4 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$5(Lcom/yubico/webauthn/data/TokenBindingInfo;)Ljava/lang/Boolean;74org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator144replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$5 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$6(Ljava/util/Optional;)Ljava/lang/Boolean;83org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator143replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$6 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorlambda$validate$6(Ljava/util/Optional;)Ljava/lang/Boolean;83org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator143replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$6 +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorvalidate(Ljava/util/Optional;Ljava/util/Optional;)Z35org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator183replaced boolean return with false for com/yubico/webauthn/TokenBindingValidator::validate +TokenBindingValidator.javacom.yubico.webauthn.TokenBindingValidatorvalidate(Ljava/util/Optional;Ljava/util/Optional;)Z35org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator183replaced boolean return with true for com/yubico/webauthn/TokenBindingValidator::validate +AppId.javacom.yubico.webauthn.extension.appid.AppId<init>(Ljava/lang/String;)V61org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.extension.appid.AppIdTest.disallowHttp(com.yubico.webauthn.extension.appid.AppIdTest)negated conditional +AppId.javacom.yubico.webauthn.extension.appid.AppId<init>(Ljava/lang/String;)V62org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator164com.yubico.webauthn.extension.appid.AppIdTest.disallowHttp(com.yubico.webauthn.extension.appid.AppIdTest)removed call to com/yubico/webauthn/extension/appid/AppId::checkIsValid +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckIsValid(Ljava/lang/String;)V73org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.extension.appid.AppIdTest.validUris(com.yubico.webauthn.extension.appid.AppIdTest)negated conditional +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckIsValid(Ljava/lang/String;)V77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator205com.yubico.webauthn.extension.appid.AppIdTest.disallowHttp(com.yubico.webauthn.extension.appid.AppIdTest)negated conditional +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckIsValid(Ljava/lang/String;)V81org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator349com.yubico.webauthn.extension.appid.AppIdTest.validUris(com.yubico.webauthn.extension.appid.AppIdTest)negated conditional +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckIsValid(Ljava/lang/String;)V83org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4311com.yubico.webauthn.extension.appid.AppIdTest.disallowSlashAsPath(com.yubico.webauthn.extension.appid.AppIdTest)removed call to com/yubico/webauthn/extension/appid/AppId::checkPathIsNotSlash +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckIsValid(Ljava/lang/String;)V84org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4712com.yubico.webauthn.extension.appid.AppIdTest.disallowIP(com.yubico.webauthn.extension.appid.AppIdTest)removed call to com/yubico/webauthn/extension/appid/AppId::checkNotIpAddress +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckNotIpAddress(Ljava/net/URI;)V104org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)negated conditional +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckNotIpAddress(Ljava/net/URI;)V105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator114com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)negated conditional +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckNotIpAddress(Ljava/net/URI;)V105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator157com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)negated conditional +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckPathIsNotSlash(Ljava/net/URI;)V89org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator72com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)negated conditional +AppId.javacom.yubico.webauthn.extension.appid.AppIdcheckValidUrl(Ljava/lang/String;)Ljava/net/URI;97org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest)replaced return value with null for com/yubico/webauthn/extension/appid/AppId::checkValidUrl +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportcompareTo(Lcom/yubico/webauthn/data/AuthenticatorTransport;)I160org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator81com.yubico.webauthn.data.EnumsSpecreplaced int return with 0 for com/yubico/webauthn/data/AuthenticatorTransport::compareTo +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportlambda$of$0(Ljava/lang/String;Lcom/yubico/webauthn/data/AuthenticatorTransport;)Z129org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator72com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced boolean return with false for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$0 +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportlambda$of$0(Ljava/lang/String;Lcom/yubico/webauthn/data/AuthenticatorTransport;)Z129org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator72com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced boolean return with true for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$0 +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportlambda$of$1(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport;131org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$1 +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportof(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport;127org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.AuthenticatorTransportSpecnegated conditional +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportof(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport;128org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator318com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::of +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportvalueOf(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport;143org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator6218com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportvalueOf(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport;145org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator6719com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportvalueOf(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport;147org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator7220com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportvalueOf(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport;149org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator7721com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportvalueOf(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport;151org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator8222com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf +AuthenticatorTransport.javacom.yubico.webauthn.data.AuthenticatorTransportvalues()[Lcom/yubico/webauthn/data/AuthenticatorTransport;117org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator250com.yubico.webauthn.data.AuthenticatorTransportSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::values +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderappId(Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;621org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderappId(Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;622org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator175com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::appId +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderappId(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;590org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderappId(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;592org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::appId +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderattestationConveyancePreference(Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;668org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderattestationConveyancePreference(Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;669org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator175com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationConveyancePreference +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderattestationConveyancePreference(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;644org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderattestationConveyancePreference(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;646org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationConveyancePreference +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderattestationTrustSource(Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;701org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderattestationTrustSource(Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;702org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator175com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationTrustSource +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderattestationTrustSource(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;684org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +RelyingPartyV2.javacom.yubico.webauthn.RelyingPartyV2$RelyingPartyV2BuilderattestationTrustSource(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;686org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationTrustSource +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderappId(Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;694org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderappId(Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;695org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator175com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::appId +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderappId(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;663org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderappId(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;665org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::appId +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderattestationConveyancePreference(Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;741org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderattestationConveyancePreference(Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;742org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator175com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationConveyancePreference +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderattestationConveyancePreference(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;717org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderattestationConveyancePreference(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;719org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationConveyancePreference +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderattestationTrustSource(Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;774org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyRegistrationSpecnegated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderattestationTrustSource(Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;775org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator175com.yubico.webauthn.RelyingPartyRegistrationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationTrustSource +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderattestationTrustSource(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;757org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyRegistrationSpecnegated conditional +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilderattestationTrustSource(Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;759org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.webauthn.RelyingPartyRegistrationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationTrustSource +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicname()Lcom/yubico/webauthn/data/ByteArray;464org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator8520com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic::name +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;387org.pitest.mutationtest.engine.gregor.mutators.MathMutator274com.yubico.webauthn.RelyingPartyV2RegistrationSpecReplaced bitwise AND with OR +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;398org.pitest.mutationtest.engine.gregor.mutators.MathMutator6011com.yubico.webauthn.RelyingPartyV2RegistrationSpecReplaced bitwise AND with OR +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;387org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator284com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;398org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6211com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;403org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8716com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;406org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10520com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;414org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator14031com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;387org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator488removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;398org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator8215com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublicparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;413org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator16136removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput<init>(Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V252org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.data.ExtensionsSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput<init>(Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V252org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator113com.yubico.webauthn.data.ExtensionsSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput<init>(Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V252org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator134com.yubico.webauthn.data.ExtensionsSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput<init>(Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V257org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator267com.yubico.webauthn.data.ExtensionsSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput<init>(Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V257org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator299com.yubico.webauthn.data.ExtensionsSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInputgetRead()Z298org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator50com.yubico.webauthn.data.ExtensionsSpecreplaced boolean return with false for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getRead +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInputgetRead()Z298org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator50com.yubico.webauthn.data.ExtensionsSpecreplaced boolean return with true for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getRead +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInputgetWrite()Ljava/util/Optional;309org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getWrite +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInputread()Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;272org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator92com.yubico.webauthn.data.ExtensionsSpecreplaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::read +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInputwrite(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;285org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.ExtensionsSpecnegated conditional +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInputwrite(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;286org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::write +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;565org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator8015com.yubico.webauthn.RelyingPartyV2RegistrationSpecchanged conditional boundary +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;551org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator101com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;557org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator407com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;557org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator438com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;565org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8015com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;567org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator10420com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;551org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator305com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;557org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator6512com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;565org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator10019removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms;572org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator11723com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms::parse +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierfromId(J)Ljava/util/Optional;72org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator94com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromId +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierfromJson(J)Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;107org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator132com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with null for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromJson +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierfromPublicKey(Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;84org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierfromPublicKey(Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;89org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator277com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierfromPublicKey(Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;94org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5316com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierfromPublicKey(Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;94org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5719com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierfromPublicKey(Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;102org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator10031com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromPublicKey +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierlambda$fromId$0(JLcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z72org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator70com.yubico.webauthn.data.EnumsSpecnegated conditional +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierlambda$fromId$0(JLcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z72org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator153com.yubico.webauthn.data.EnumsSpecreplaced boolean return with true for com/yubico/webauthn/data/COSEAlgorithmIdentifier::lambda$fromId$0 +COSEAlgorithmIdentifier.javacom.yubico.webauthn.data.COSEAlgorithmIdentifierlambda$fromJson$1(J)Ljava/lang/IllegalArgumentException;109org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator145com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/data/COSEAlgorithmIdentifier::lambda$fromJson$1 +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfo<init>(Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V56org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfo<init>(Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V57org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfo<init>(Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V58org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator297com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfo<init>(Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V65org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5412com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfo<init>(Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V59org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator459removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfo<init>(Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V64org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7115removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfogetId()Ljava/util/Optional;83org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/TokenBindingInfo::getId +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfopresent(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/TokenBindingInfo;74org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfopresent(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/TokenBindingInfo;75org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.data.CollectedClientDataSpecreplaced return value with null for com/yubico/webauthn/data/TokenBindingInfo::present +TokenBindingInfo.javacom.yubico.webauthn.data.TokenBindingInfosupported()Lcom/yubico/webauthn/data/TokenBindingInfo;79org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82replaced return value with null for com/yubico/webauthn/data/TokenBindingInfo::supported +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteria<init>(Lcom/yubico/webauthn/data/AuthenticatorAttachment;Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ResidentKeyRequirement;Lcom/yubico/webauthn/data/UserVerificationRequirement;)V180org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator131com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)negated conditional +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteria<init>(Lcom/yubico/webauthn/data/AuthenticatorAttachment;Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ResidentKeyRequirement;Lcom/yubico/webauthn/data/UserVerificationRequirement;)V182org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator243com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)negated conditional +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteria<init>(Lcom/yubico/webauthn/data/AuthenticatorAttachment;Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ResidentKeyRequirement;Lcom/yubico/webauthn/data/UserVerificationRequirement;)V184org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator325com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)negated conditional +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteriagetAuthenticatorAttachment()Ljava/util/Optional;105org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getAuthenticatorAttachment +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteriagetResidentKey()Ljava/util/Optional;136org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getResidentKey +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteriagetUserVerification()Ljava/util/Optional;169org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getUserVerification +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteriaisRequireResidentKey()Ljava/lang/Boolean;149org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator103com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced Boolean return with False for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::isRequireResidentKey +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteriaisRequireResidentKey()Ljava/lang/Boolean;149org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator103com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced Boolean return with True for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::isRequireResidentKey +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriterialambda$isRequireResidentKey$0(Lcom/yubico/webauthn/data/ResidentKeyRequirement;)Ljava/lang/Boolean;149org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriterialambda$isRequireResidentKey$0(Lcom/yubico/webauthn/data/ResidentKeyRequirement;)Ljava/lang/Boolean;149org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator144com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced Boolean return with True for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::lambda$isRequireResidentKey$0 +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilderallowCredentials(Ljava/util/List;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;253org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::allowCredentials +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilderallowCredentials(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;241org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilderallowCredentials(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;242org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::allowCredentials +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilderrpId(Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;232org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::rpId +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilderrpId(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;221org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilderrpId(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;222org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::rpId +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuildertimeout(J)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;213org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator83replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuildertimeout(Ljava/lang/Long;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;203org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;193org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;195org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator224com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8authenticatorData()Lcom/yubico/webauthn/data/ByteArray;315org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator93com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::authenticatorData +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8clientData()Lcom/yubico/webauthn/data/ByteArray;319org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator93com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::clientData +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step10;311org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8signature()Lcom/yubico/webauthn/data/ByteArray;323org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator93com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::signature +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8validate()V304org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8validate()V305org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator216com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8validate()V306org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3711com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8validate()V304org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator164removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8validate()V305org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator329removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step8validate()V306org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4814removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilderauthenticatorSelection(Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;126org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::authenticatorSelection +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilderauthenticatorSelection(Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;115org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilderauthenticatorSelection(Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;116org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::authenticatorSelection +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuildertimeout(J)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;158org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator83com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::timeout +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;140org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator227com.yubico.webauthn.RelyingPartyStartOperationSpecchanged conditional boundary +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;139org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;140org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator154com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;140org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator227com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;144org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator5016com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::timeout +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step21nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Finished;637org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator162com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step21::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step21signatureCounterValid()Z631org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator202com.yubico.webauthn.RelyingPartyV2AssertionSpecchanged conditional boundary +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step21signatureCounterValid()Z631org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator70com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step21signatureCounterValid()Z631org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator121com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step21signatureCounterValid()Z631org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator202com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step21signatureCounterValid()Z631org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator305com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step21::signatureCounterValid +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step21validate()V626org.pitest.mutationtest.engine.gregor.mutators.MathMutator236com.yubico.webauthn.RelyingPartyV2AssertionSpecReplaced long addition with subtraction +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step21validate()V624org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step21validate()V624org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator93com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilderauthenticatorSelection(Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;359org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::authenticatorSelection +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilderauthenticatorSelection(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;348org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)negated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilderauthenticatorSelection(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;349org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::authenticatorSelection +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilderexcludeCredentials(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;328org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator92com.yubico.webauthn.data.BuildersSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::excludeCredentials +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilderexcludeCredentials(Ljava/util/Set;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;340org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::excludeCredentials +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuildertimeout(J)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;317org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator83replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuildertimeout(Ljava/lang/Long;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;309org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;299org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)negated conditional +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuildertimeout(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;301org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator224com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Stepnext()Lcom/yubico/webauthn/FinishAssertionSteps$Step;134org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator40com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/webauthn/FinishAssertionSteps$Step::validate +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Stepnext()Lcom/yubico/webauthn/FinishAssertionSteps$Step;135org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator92com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::next +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Steprun()Lcom/yubico/webauthn/AssertionResult;139org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Steprun()Lcom/yubico/webauthn/AssertionResult;140org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator135com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::run +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Steprun()Lcom/yubico/webauthn/AssertionResult;142org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator208com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::run +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$SteprunV2()Lcom/yubico/webauthn/AssertionResultV2;147org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$SteprunV2()Lcom/yubico/webauthn/AssertionResultV2;148org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator135com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::runV2 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$SteprunV2()Lcom/yubico/webauthn/AssertionResultV2;150org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator208com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::runV2 +AssertionRequest.javacom.yubico.webauthn.AssertionRequest$AssertionRequestBuilderuserHandle(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder;297org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionRequest.javacom.yubico.webauthn.AssertionRequest$AssertionRequestBuilderuserHandle(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder;301org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator192com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::userHandle +AssertionRequest.javacom.yubico.webauthn.AssertionRequest$AssertionRequestBuilderuserHandle(Ljava/util/Optional;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder;277org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionRequest.javacom.yubico.webauthn.AssertionRequest$AssertionRequestBuilderuserHandle(Ljava/util/Optional;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder;278org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::userHandle +AssertionRequest.javacom.yubico.webauthn.AssertionRequest$AssertionRequestBuilderusername(Ljava/lang/String;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder;256org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator90com.yubico.webauthn.RelyingPartyStartOperationSpecnegated conditional +AssertionRequest.javacom.yubico.webauthn.AssertionRequest$AssertionRequestBuilderusername(Ljava/lang/String;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder;259org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator192com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::username +AssertionRequest.javacom.yubico.webauthn.AssertionRequest$AssertionRequestBuilderusername(Ljava/util/Optional;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder;236org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionRequest.javacom.yubico.webauthn.AssertionRequest$AssertionRequestBuilderusername(Ljava/util/Optional;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder;237org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::username +AuthenticatorAssertionExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs<init>(Ljava/util/List;)V68org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator91com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +AuthenticatorAssertionExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputsfromAuthenticatorData(Lcom/yubico/webauthn/data/AuthenticatorData;)Ljava/util/Optional;103org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator72com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::fromAuthenticatorData +AuthenticatorAssertionExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputsfromCbor(Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional;114org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator257com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +AuthenticatorAssertionExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputsfromCbor(Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional;110org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator143com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to java/util/Optional::ifPresent +AuthenticatorAssertionExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputsfromCbor(Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional;117org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator3511com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::fromCbor +AuthenticatorAssertionExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputsgetExtensionIds()Ljava/util/Set;125org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator111com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +AuthenticatorAssertionExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputsgetExtensionIds()Ljava/util/Set;128org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator224com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Collections.emptySet for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::getExtensionIds +AuthenticatorAssertionExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputsgetUvm()Ljava/util/Optional;141org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::getUvm +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions<init>(Lcom/yubico/webauthn/data/ByteArray;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lcom/yubico/webauthn/data/UserVerificationRequirement;Lcom/yubico/webauthn/data/AssertionExtensionInputs;)V113org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions<init>(Lcom/yubico/webauthn/data/ByteArray;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lcom/yubico/webauthn/data/UserVerificationRequirement;Lcom/yubico/webauthn/data/AssertionExtensionInputs;)V118org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions<init>(Lcom/yubico/webauthn/data/ByteArray;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lcom/yubico/webauthn/data/UserVerificationRequirement;Lcom/yubico/webauthn/data/AssertionExtensionInputs;)V123org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator467com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptionsbuilder()Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder$MandatoryStages;164org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::builder +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptionsgetAllowCredentials()Ljava/util/Optional;133org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getAllowCredentials +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptionsgetTimeout()Ljava/util/Optional;129org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getTimeout +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptionsgetUserVerification()Ljava/util/Optional;137org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getUserVerification +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptionstoCredentialsGetJson()Ljava/lang/String;160org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator245com.yubico.webauthn.data.JsonIoSpecreplaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::toCredentialsGetJson +U2fRawRegisterResponse.javacom.yubico.webauthn.U2fRawRegisterResponsepackBytesToSign(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;75org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator91com.yubico.webauthn.RelyingPartyCeremoniesSpecremoved call to com/google/common/io/ByteArrayDataOutput::write +U2fRawRegisterResponse.javacom.yubico.webauthn.U2fRawRegisterResponsepackBytesToSign(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;76org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator153com.yubico.webauthn.RelyingPartyCeremoniesSpecremoved call to com/google/common/io/ByteArrayDataOutput::write +U2fRawRegisterResponse.javacom.yubico.webauthn.U2fRawRegisterResponsepackBytesToSign(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;77org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator215com.yubico.webauthn.RelyingPartyCeremoniesSpecremoved call to com/google/common/io/ByteArrayDataOutput::write +U2fRawRegisterResponse.javacom.yubico.webauthn.U2fRawRegisterResponsepackBytesToSign(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;78org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator277com.yubico.webauthn.RelyingPartyCeremoniesSpecremoved call to com/google/common/io/ByteArrayDataOutput::write +U2fRawRegisterResponse.javacom.yubico.webauthn.U2fRawRegisterResponsepackBytesToSign(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;79org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator339com.yubico.webauthn.RelyingPartyCeremoniesSpecremoved call to com/google/common/io/ByteArrayDataOutput::write +U2fRawRegisterResponse.javacom.yubico.webauthn.U2fRawRegisterResponsepackBytesToSign(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;80org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator4112com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/U2fRawRegisterResponse::packBytesToSign +U2fRawRegisterResponse.javacom.yubico.webauthn.U2fRawRegisterResponseverifySignature(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Z68org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator202com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with false for com/yubico/webauthn/U2fRawRegisterResponse::verifySignature +U2fRawRegisterResponse.javacom.yubico.webauthn.U2fRawRegisterResponseverifySignature(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Z68org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator202com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/U2fRawRegisterResponse::verifySignature +KeyProtectionType.javacom.yubico.webauthn.extension.uvm.KeyProtectionTypefromName(Ljava/lang/String;)Lcom/yubico/webauthn/extension/uvm/KeyProtectionType;130org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator215replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::fromName +KeyProtectionType.javacom.yubico.webauthn.extension.uvm.KeyProtectionTypefromValue(S)Lcom/yubico/webauthn/extension/uvm/KeyProtectionType;115org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator215com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::fromValue +KeyProtectionType.javacom.yubico.webauthn.extension.uvm.KeyProtectionTypelambda$fromName$2(Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/KeyProtectionType;)Z131org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71replaced boolean return with false for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$2 +KeyProtectionType.javacom.yubico.webauthn.extension.uvm.KeyProtectionTypelambda$fromName$2(Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/KeyProtectionType;)Z131org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71replaced boolean return with true for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$2 +KeyProtectionType.javacom.yubico.webauthn.extension.uvm.KeyProtectionTypelambda$fromName$3(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;135org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator222replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$3 +KeyProtectionType.javacom.yubico.webauthn.extension.uvm.KeyProtectionTypelambda$fromValue$0(SLcom/yubico/webauthn/extension/uvm/KeyProtectionType;)Z116org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator60com.yubico.webauthn.data.EnumsSpecnegated conditional +KeyProtectionType.javacom.yubico.webauthn.extension.uvm.KeyProtectionTypelambda$fromValue$0(SLcom/yubico/webauthn/extension/uvm/KeyProtectionType;)Z116org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator143com.yubico.webauthn.data.EnumsSpecreplaced boolean return with true for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromValue$0 +KeyProtectionType.javacom.yubico.webauthn.extension.uvm.KeyProtectionTypelambda$fromValue$1(S)Ljava/lang/IllegalArgumentException;120org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator233com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromValue$1 +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;JLjava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;)V207org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;JLjava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;)V208org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;JLjava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;)V209org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredentialbuilder()Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages;309org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RegisteredCredential::builder +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredentialgetParsedPublicKey()Ljava/security/PublicKey;108org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator62replaced return value with null for com/yubico/webauthn/RegisteredCredential::getParsedPublicKey +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredentialgetTransports()Ljava/util/Optional;255org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::getTransports +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredentialisBackedUp()Ljava/util/Optional;305org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.JsonIoSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::isBackedUp +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredentialisBackupEligible()Ljava/util/Optional;281org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyAssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::isBackupEligible +MatcherProtectionType.javacom.yubico.webauthn.extension.uvm.MatcherProtectionTypefromName(Ljava/lang/String;)Lcom/yubico/webauthn/extension/uvm/MatcherProtectionType;93org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator215replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::fromName +MatcherProtectionType.javacom.yubico.webauthn.extension.uvm.MatcherProtectionTypefromValue(I)Lcom/yubico/webauthn/extension/uvm/MatcherProtectionType;78org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator215com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::fromValue +MatcherProtectionType.javacom.yubico.webauthn.extension.uvm.MatcherProtectionTypelambda$fromName$2(Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/MatcherProtectionType;)Z94org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71replaced boolean return with false for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$2 +MatcherProtectionType.javacom.yubico.webauthn.extension.uvm.MatcherProtectionTypelambda$fromName$2(Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/MatcherProtectionType;)Z94org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71replaced boolean return with true for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$2 +MatcherProtectionType.javacom.yubico.webauthn.extension.uvm.MatcherProtectionTypelambda$fromName$3(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;98org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator222replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$3 +MatcherProtectionType.javacom.yubico.webauthn.extension.uvm.MatcherProtectionTypelambda$fromValue$0(ILcom/yubico/webauthn/extension/uvm/MatcherProtectionType;)Z79org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator60com.yubico.webauthn.data.EnumsSpecnegated conditional +MatcherProtectionType.javacom.yubico.webauthn.extension.uvm.MatcherProtectionTypelambda$fromValue$0(ILcom/yubico/webauthn/extension/uvm/MatcherProtectionType;)Z79org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator143com.yubico.webauthn.data.EnumsSpecreplaced boolean return with true for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromValue$0 +MatcherProtectionType.javacom.yubico.webauthn.extension.uvm.MatcherProtectionTypelambda$fromValue$1(I)Ljava/lang/IllegalArgumentException;83org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator233com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromValue$1 +UserVerificationMethod.javacom.yubico.webauthn.extension.uvm.UserVerificationMethodfromName(Ljava/lang/String;)Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;218org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator215replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::fromName +UserVerificationMethod.javacom.yubico.webauthn.extension.uvm.UserVerificationMethodfromValue(I)Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;202org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator215com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::fromValue +UserVerificationMethod.javacom.yubico.webauthn.extension.uvm.UserVerificationMethodlambda$fromName$2(Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z219org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71replaced boolean return with false for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$2 +UserVerificationMethod.javacom.yubico.webauthn.extension.uvm.UserVerificationMethodlambda$fromName$2(Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z219org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71replaced boolean return with true for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$2 +UserVerificationMethod.javacom.yubico.webauthn.extension.uvm.UserVerificationMethodlambda$fromName$3(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;223org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator222replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$3 +UserVerificationMethod.javacom.yubico.webauthn.extension.uvm.UserVerificationMethodlambda$fromValue$0(ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z203org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator60com.yubico.webauthn.data.EnumsSpecnegated conditional +UserVerificationMethod.javacom.yubico.webauthn.extension.uvm.UserVerificationMethodlambda$fromValue$0(ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z203org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator143com.yubico.webauthn.data.EnumsSpecreplaced boolean return with true for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromValue$0 +UserVerificationMethod.javacom.yubico.webauthn.extension.uvm.UserVerificationMethodlambda$fromValue$1(I)Ljava/lang/IllegalArgumentException;207org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator253com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromValue$1 +AttestationObject.javacom.yubico.webauthn.data.AttestationObject<init>(Lcom/yubico/webauthn/data/ByteArray;)V101org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestationObject.javacom.yubico.webauthn.data.AttestationObject<init>(Lcom/yubico/webauthn/data/ByteArray;)V107org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator298com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestationObject.javacom.yubico.webauthn.data.AttestationObject<init>(Lcom/yubico/webauthn/data/ByteArray;)V113org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5714com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestationObject.javacom.yubico.webauthn.data.AttestationObject<init>(Lcom/yubico/webauthn/data/ByteArray;)V118org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8023com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestationObject.javacom.yubico.webauthn.data.AttestationObject<init>(Lcom/yubico/webauthn/data/ByteArray;)V129org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator12633com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestationObject.javacom.yubico.webauthn.data.AttestationObject<init>(Lcom/yubico/webauthn/data/ByteArray;)V133org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator14942com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestationObject.javacom.yubico.webauthn.data.AttestationObject<init>(Lcom/yubico/webauthn/data/ByteArray;)V144org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator19452com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestationObject.javacom.yubico.webauthn.data.AttestationObject<init>(Lcom/yubico/webauthn/data/ByteArray;)V148org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator21761com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step18attestationStatementVerifier()Ljava/util/Optional;400org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator7524com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step18attestationStatementVerifier()Ljava/util/Optional;402org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator8327com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step18attestationStatementVerifier()Ljava/util/Optional;404org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator9130com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step18attestationStatementVerifier()Ljava/util/Optional;406org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator9933com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step18attestationStatementVerifier()Ljava/util/Optional;408org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator10736com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step18attestationStatementVerifier()Ljava/util/Optional;410org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator11539com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step18format()Ljava/lang/String;394org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with "" for com/yubico/webauthn/FinishRegistrationSteps$Step18::format +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step18nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step19;390org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step18::nextStep +CollectedClientData.javacom.yubico.webauthn.data.CollectedClientData<init>(Lcom/yubico/webauthn/data/ByteArray;)V80org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +CollectedClientData.javacom.yubico.webauthn.data.CollectedClientData<init>(Lcom/yubico/webauthn/data/ByteArray;)V84org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator257com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +CollectedClientData.javacom.yubico.webauthn.data.CollectedClientData<init>(Lcom/yubico/webauthn/data/ByteArray;)V85org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator309com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +CollectedClientData.javacom.yubico.webauthn.data.CollectedClientData<init>(Lcom/yubico/webauthn/data/ByteArray;)V84org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4312com.yubico.webauthn.data.CollectedClientDataSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +CollectedClientData.javacom.yubico.webauthn.data.CollectedClientDatagetTokenBinding()Ljava/util/Optional;117org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator143com.yubico.webauthn.data.CollectedClientDataSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/CollectedClientData::getTokenBinding +CollectedClientData.javacom.yubico.webauthn.data.CollectedClientDatalambda$getTokenBinding$0(Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray;129org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.CollectedClientDataSpecreplaced return value with null for com/yubico/webauthn/data/CollectedClientData::lambda$getTokenBinding$0 +CollectedClientData.javacom.yubico.webauthn.data.CollectedClientDatalambda$getTokenBinding$1(Lcom/fasterxml/jackson/databind/JsonNode;)Lcom/yubico/webauthn/data/TokenBindingInfo;120org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +CollectedClientData.javacom.yubico.webauthn.data.CollectedClientDatalambda$getTokenBinding$1(Lcom/fasterxml/jackson/databind/JsonNode;)Lcom/yubico/webauthn/data/TokenBindingInfo;122org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator3810com.yubico.webauthn.data.CollectedClientDataSpecreplaced return value with null for com/yubico/webauthn/data/CollectedClientData::lambda$getTokenBinding$1 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step20findTrustRoots()Ljava/util/Optional;504org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator92com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::findTrustRoots +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step20lambda$findTrustRoots$0(Lcom/yubico/webauthn/data/ByteArray;)Z517org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step20lambda$findTrustRoots$0(Lcom/yubico/webauthn/data/ByteArray;)Z517org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator145com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$0 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step20lambda$findTrustRoots$1(Ljava/util/List;)Ljava/util/Optional;519org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step20lambda$findTrustRoots$1(Ljava/util/List;)Ljava/util/Optional;520org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator195com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$1 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step20lambda$findTrustRoots$2(Lcom/yubico/webauthn/attestation/AttestationTrustSource;Ljava/util/List;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult;508org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator358com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$2 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step20lambda$findTrustRoots$3(Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Ljava/util/Optional;506org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator91com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$3 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step20nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step21;500org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator161com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step20::nextStep +AssertionRequest.javacom.yubico.webauthn.AssertionRequest<init>(Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V90org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionRequest.javacom.yubico.webauthn.AssertionRequest<init>(Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V96org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator234com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AssertionRequest.javacom.yubico.webauthn.AssertionRequestbuilder()Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder$MandatoryStages;198org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/AssertionRequest::builder +AssertionRequest.javacom.yubico.webauthn.AssertionRequestfromJson(Ljava/lang/String;)Lcom/yubico/webauthn/AssertionRequest;194org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.data.JsonIoSpecreplaced return value with null for com/yubico/webauthn/AssertionRequest::fromJson +AssertionRequest.javacom.yubico.webauthn.AssertionRequestgetUserHandle()Ljava/util/Optional;140org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/AssertionRequest::getUserHandle +AssertionRequest.javacom.yubico.webauthn.AssertionRequestgetUsername()Ljava/util/Optional;121org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/AssertionRequest::getUsername +AssertionRequest.javacom.yubico.webauthn.AssertionRequesttoCredentialsGetJson()Ljava/lang/String;162org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.JsonIoSpecreplaced return value with "" for com/yubico/webauthn/AssertionRequest::toCredentialsGetJson +AssertionRequest.javacom.yubico.webauthn.AssertionRequesttoJson()Ljava/lang/String;180org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator62com.yubico.webauthn.data.JsonIoSpecreplaced return value with "" for com/yubico/webauthn/AssertionRequest::toJson +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilderappidExclude(Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder;211org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::appidExclude +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilderappidExclude(Ljava/util/Optional;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder;191org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::appidExclude +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuildercredProps()Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder;223org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator101com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::credProps +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuildercredProps(Ljava/lang/Boolean;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder;242org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::credProps +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilderlargeBlob(Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationInput$LargeBlobSupport;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder;263org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::largeBlob +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilderlargeBlob(Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationInput;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder;277org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::largeBlob +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilderuvm()Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder;288org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator101com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::uvm +RegistrationExtensionInputs.javacom.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilderuvm(Ljava/lang/Boolean;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder;294org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::uvm +AppleAttestationStatementVerifier.javacom.yubico.webauthn.AppleAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;45org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/AppleAttestationStatementVerifier::getAttestationType +AppleAttestationStatementVerifier.javacom.yubico.webauthn.AppleAttestationStatementVerifierlambda$verifyAttestationSignature$0(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;71org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator255com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +AppleAttestationStatementVerifier.javacom.yubico.webauthn.AppleAttestationStatementVerifierlambda$verifyAttestationSignature$0(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;88org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8612com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +AppleAttestationStatementVerifier.javacom.yubico.webauthn.AppleAttestationStatementVerifierlambda$verifyAttestationSignature$0(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;112org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator16027com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +AppleAttestationStatementVerifier.javacom.yubico.webauthn.AppleAttestationStatementVerifierlambda$verifyAttestationSignature$0(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean;119org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator18632com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced Boolean return with False for com/yubico/webauthn/AppleAttestationStatementVerifier::lambda$verifyAttestationSignature$0 +AppleAttestationStatementVerifier.javacom.yubico.webauthn.AppleAttestationStatementVerifierlambda$verifyAttestationSignature$1()Ljava/lang/IllegalArgumentException;123org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71replaced return value with null for com/yubico/webauthn/AppleAttestationStatementVerifier::lambda$verifyAttestationSignature$1 +AppleAttestationStatementVerifier.javacom.yubico.webauthn.AppleAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z62org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator508com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with false for com/yubico/webauthn/AppleAttestationStatementVerifier::verifyAttestationSignature +AppleAttestationStatementVerifier.javacom.yubico.webauthn.AppleAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z62org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator508replaced boolean return with true for com/yubico/webauthn/AppleAttestationStatementVerifier::verifyAttestationSignature +AuthenticatorRegistrationExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs<init>(Ljava/util/List;)V69org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator91com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AuthenticatorRegistrationExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputsfromAuthenticatorData(Lcom/yubico/webauthn/data/AuthenticatorData;)Ljava/util/Optional;104org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator72com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::fromAuthenticatorData +AuthenticatorRegistrationExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputsfromCbor(Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional;114org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator257com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AuthenticatorRegistrationExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputsfromCbor(Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional;110org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator143com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to java/util/Optional::ifPresent +AuthenticatorRegistrationExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputsfromCbor(Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional;117org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator3511com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::fromCbor +AuthenticatorRegistrationExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputsgetExtensionIds()Ljava/util/Set;125org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator111com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AuthenticatorRegistrationExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputsgetExtensionIds()Ljava/util/Set;128org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator224com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Collections.emptySet for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::getExtensionIds +AuthenticatorRegistrationExtensionOutputs.javacom.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputsgetUvm()Ljava/util/Optional;141org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::getUvm +PublicKeyCredentialType.javacom.yubico.webauthn.data.PublicKeyCredentialTypefromId(Ljava/lang/String;)Ljava/util/Optional;65org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.EnumsSpecnegated conditional +PublicKeyCredentialType.javacom.yubico.webauthn.data.PublicKeyCredentialTypefromId(Ljava/lang/String;)Ljava/util/Optional;66org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator197com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialType::fromId +PublicKeyCredentialType.javacom.yubico.webauthn.data.PublicKeyCredentialTypefromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredentialType;70org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.EnumsSpecnegated conditional +PublicKeyCredentialType.javacom.yubico.webauthn.data.PublicKeyCredentialTypefromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredentialType;71org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator235com.yubico.webauthn.data.ExtensionsSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialType::fromJsonString +PublicKeyCredentialType.javacom.yubico.webauthn.data.PublicKeyCredentialTypelambda$fromId$0(Ljava/lang/String;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)Z66org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71com.yubico.webauthn.data.ExtensionsSpecreplaced boolean return with false for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromId$0 +PublicKeyCredentialType.javacom.yubico.webauthn.data.PublicKeyCredentialTypelambda$fromId$0(Ljava/lang/String;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)Z66org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71com.yubico.webauthn.data.EnumsSpecreplaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromId$0 +PublicKeyCredentialType.javacom.yubico.webauthn.data.PublicKeyCredentialTypelambda$fromJsonString$1(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;74org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator253com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromJsonString$1 +TokenBindingStatus.javacom.yubico.webauthn.data.TokenBindingStatusfromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/TokenBindingStatus;77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +TokenBindingStatus.javacom.yubico.webauthn.data.TokenBindingStatusfromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/TokenBindingStatus;78org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator235com.yubico.webauthn.data.CollectedClientDataSpecreplaced return value with null for com/yubico/webauthn/data/TokenBindingStatus::fromJsonString +TokenBindingStatus.javacom.yubico.webauthn.data.TokenBindingStatusfromValue(Ljava/lang/String;)Ljava/util/Optional;72org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.CollectedClientDataSpecnegated conditional +TokenBindingStatus.javacom.yubico.webauthn.data.TokenBindingStatusfromValue(Ljava/lang/String;)Ljava/util/Optional;73org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator197com.yubico.webauthn.data.CollectedClientDataSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/TokenBindingStatus::fromValue +TokenBindingStatus.javacom.yubico.webauthn.data.TokenBindingStatuslambda$fromJsonString$1(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;81org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator253replaced return value with null for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromJsonString$1 +TokenBindingStatus.javacom.yubico.webauthn.data.TokenBindingStatuslambda$fromValue$0(Ljava/lang/String;Lcom/yubico/webauthn/data/TokenBindingStatus;)Z73org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71com.yubico.webauthn.data.CollectedClientDataSpecreplaced boolean return with false for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromValue$0 +TokenBindingStatus.javacom.yubico.webauthn.data.TokenBindingStatuslambda$fromValue$0(Ljava/lang/String;Lcom/yubico/webauthn/data/TokenBindingStatus;)Z73org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced boolean return with true for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromValue$0 +UserVerificationRequirement.javacom.yubico.webauthn.data.UserVerificationRequirementfromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/UserVerificationRequirement;85org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.EnumsSpecnegated conditional +UserVerificationRequirement.javacom.yubico.webauthn.data.UserVerificationRequirementfromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/UserVerificationRequirement;86org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator235com.yubico.webauthn.data.JsonIoSpecreplaced return value with null for com/yubico/webauthn/data/UserVerificationRequirement::fromJsonString +UserVerificationRequirement.javacom.yubico.webauthn.data.UserVerificationRequirementfromValue(Ljava/lang/String;)Ljava/util/Optional;80org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.EnumsSpecnegated conditional +UserVerificationRequirement.javacom.yubico.webauthn.data.UserVerificationRequirementfromValue(Ljava/lang/String;)Ljava/util/Optional;81org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator197com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/UserVerificationRequirement::fromValue +UserVerificationRequirement.javacom.yubico.webauthn.data.UserVerificationRequirementlambda$fromJsonString$1(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;89org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator253com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromJsonString$1 +UserVerificationRequirement.javacom.yubico.webauthn.data.UserVerificationRequirementlambda$fromValue$0(Ljava/lang/String;Lcom/yubico/webauthn/data/UserVerificationRequirement;)Z81org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with false for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromValue$0 +UserVerificationRequirement.javacom.yubico.webauthn.data.UserVerificationRequirementlambda$fromValue$0(Ljava/lang/String;Lcom/yubico/webauthn/data/UserVerificationRequirement;)Z81org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71com.yubico.webauthn.data.EnumsSpecreplaced boolean return with true for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromValue$0 +AttestationConveyancePreference.javacom.yubico.webauthn.data.AttestationConveyancePreferencefromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/AttestationConveyancePreference;98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.EnumsSpecnegated conditional +AttestationConveyancePreference.javacom.yubico.webauthn.data.AttestationConveyancePreferencefromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/AttestationConveyancePreference;99org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator235com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/data/AttestationConveyancePreference::fromJsonString +AttestationConveyancePreference.javacom.yubico.webauthn.data.AttestationConveyancePreferencefromString(Ljava/lang/String;)Ljava/util/Optional;93org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.EnumsSpecnegated conditional +AttestationConveyancePreference.javacom.yubico.webauthn.data.AttestationConveyancePreferencefromString(Ljava/lang/String;)Ljava/util/Optional;94org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator197com.yubico.webauthn.data.EnumsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AttestationConveyancePreference::fromString +AttestationConveyancePreference.javacom.yubico.webauthn.data.AttestationConveyancePreferencelambda$fromJsonString$1(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;102org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator253com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromJsonString$1 +AttestationConveyancePreference.javacom.yubico.webauthn.data.AttestationConveyancePreferencelambda$fromString$0(Ljava/lang/String;Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Z94org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71com.yubico.webauthn.data.EnumsSpecreplaced boolean return with false for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromString$0 +AttestationConveyancePreference.javacom.yubico.webauthn.data.AttestationConveyancePreferencelambda$fromString$0(Ljava/lang/String;Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Z94org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71com.yubico.webauthn.data.EnumsSpecreplaced boolean return with true for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromString$0 +ClientRegistrationExtensionOutputs.javacom.yubico.webauthn.data.ClientRegistrationExtensionOutputsgetAppidExclude()Ljava/util/Optional;101org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getAppidExclude +ClientRegistrationExtensionOutputs.javacom.yubico.webauthn.data.ClientRegistrationExtensionOutputsgetCredProps()Ljava/util/Optional;116org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getCredProps +ClientRegistrationExtensionOutputs.javacom.yubico.webauthn.data.ClientRegistrationExtensionOutputsgetExtensionIds()Ljava/util/Set;76org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator111com.yubico.webauthn.data.ExtensionsSpecnegated conditional +ClientRegistrationExtensionOutputs.javacom.yubico.webauthn.data.ClientRegistrationExtensionOutputsgetExtensionIds()Ljava/util/Set;79org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator234com.yubico.webauthn.data.ExtensionsSpecnegated conditional +ClientRegistrationExtensionOutputs.javacom.yubico.webauthn.data.ClientRegistrationExtensionOutputsgetExtensionIds()Ljava/util/Set;82org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator357com.yubico.webauthn.data.ExtensionsSpecnegated conditional +ClientRegistrationExtensionOutputs.javacom.yubico.webauthn.data.ClientRegistrationExtensionOutputsgetExtensionIds()Ljava/util/Set;85org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator4610com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Collections.emptySet for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getExtensionIds +ClientRegistrationExtensionOutputs.javacom.yubico.webauthn.data.ClientRegistrationExtensionOutputsgetLargeBlob()Ljava/util/Optional;128org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getLargeBlob +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult<init>(Ljava/util/Set;Ljava/security/cert/CertStore;ZLjava/util/function/Predicate;)V136org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResultbuilder()Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1;187org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::builder +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResultgetCertStore()Ljava/util/Optional;158org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getCertStore +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResultgetPolicyTreeValidator()Ljava/util/Optional;183org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getPolicyTreeValidator +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResultgetTrustRoots()Ljava/util/Set;288org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Collections.emptySet for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getTrustRoots +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResultisEnableRevocationChecking()Z294org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator50replaced boolean return with false for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::isEnableRevocationChecking +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResultisEnableRevocationChecking()Z294org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator50com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::isEnableRevocationChecking +X5cAttestationStatementVerifier.javacom.yubico.webauthn.X5cAttestationStatementVerifiergetAttestationTrustPath(Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional;48org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator101com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +X5cAttestationStatementVerifier.javacom.yubico.webauthn.X5cAttestationStatementVerifiergetAttestationTrustPath(Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional;48org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator133com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +X5cAttestationStatementVerifier.javacom.yubico.webauthn.X5cAttestationStatementVerifiergetAttestationTrustPath(Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional;52org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4012com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +X5cAttestationStatementVerifier.javacom.yubico.webauthn.X5cAttestationStatementVerifiergetAttestationTrustPath(Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional;67org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator9325com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::getAttestationTrustPath +X5cAttestationStatementVerifier.javacom.yubico.webauthn.X5cAttestationStatementVerifiergetX5cArray(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/fasterxml/jackson/databind/JsonNode;74org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/X5cAttestationStatementVerifier::getX5cArray +X5cAttestationStatementVerifier.javacom.yubico.webauthn.X5cAttestationStatementVerifiergetX5cAttestationCertificate(Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional;41org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator82com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::getX5cAttestationCertificate +X5cAttestationStatementVerifier.javacom.yubico.webauthn.X5cAttestationStatementVerifierlambda$getX5cAttestationCertificate$0(Ljava/util/List;)Ljava/util/Optional;41org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator62com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::lambda$getX5cAttestationCertificate$0 +ResidentKeyRequirement.javacom.yubico.webauthn.data.ResidentKeyRequirementfromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/ResidentKeyRequirement;124org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)negated conditional +ResidentKeyRequirement.javacom.yubico.webauthn.data.ResidentKeyRequirementfromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/ResidentKeyRequirement;125org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator235com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)replaced return value with null for com/yubico/webauthn/data/ResidentKeyRequirement::fromJsonString +ResidentKeyRequirement.javacom.yubico.webauthn.data.ResidentKeyRequirementfromValue(Ljava/lang/String;)Ljava/util/Optional;119org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)negated conditional +ResidentKeyRequirement.javacom.yubico.webauthn.data.ResidentKeyRequirementfromValue(Ljava/lang/String;)Ljava/util/Optional;120org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator197com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)replaced return value with Optional.empty for com/yubico/webauthn/data/ResidentKeyRequirement::fromValue +ResidentKeyRequirement.javacom.yubico.webauthn.data.ResidentKeyRequirementlambda$fromJsonString$1(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;128org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator253com.yubico.webauthn.data.EnumsSpecreplaced return value with null for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromJsonString$1 +ResidentKeyRequirement.javacom.yubico.webauthn.data.ResidentKeyRequirementlambda$fromValue$0(Ljava/lang/String;Lcom/yubico/webauthn/data/ResidentKeyRequirement;)Z120org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)replaced boolean return with false for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromValue$0 +ResidentKeyRequirement.javacom.yubico.webauthn.data.ResidentKeyRequirementlambda$fromValue$0(Ljava/lang/String;Lcom/yubico/webauthn/data/ResidentKeyRequirement;)Z120org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)replaced boolean return with true for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromValue$0 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step5lambda$validate$0(Ljava/util/List;)Z169org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step5lambda$validate$0(Ljava/util/List;)Z169org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator134com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$0 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step5lambda$validate$1(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)Z173org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator104com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced boolean return with false for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$1 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step5lambda$validate$1(Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)Z173org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator104com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$1 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step5lambda$validate$2(Ljava/util/List;)V172org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator244com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step5nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step6;161org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step5::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step5validate()V170org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator204com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to java/util/Optional::ifPresent +AuthenticatorAttestationResponse.javacom.yubico.webauthn.data.AuthenticatorAttestationResponse<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V106org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AuthenticatorAttestationResponse.javacom.yubico.webauthn.data.AuthenticatorAttestationResponse<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V107org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AuthenticatorAttestationResponse.javacom.yubico.webauthn.data.AuthenticatorAttestationResponse<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V113org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator417com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AuthenticatorAttestationResponse.javacom.yubico.webauthn.data.AuthenticatorAttestationResponsebuilder()Lcom/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages;130org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::builder +AuthenticatorAttestationResponse.javacom.yubico.webauthn.data.AuthenticatorAttestationResponsegetAuthenticatorData()Lcom/yubico/webauthn/data/ByteArray;100org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::getAuthenticatorData +AuthenticatorAttestationResponse.javacom.yubico.webauthn.data.AuthenticatorAttestationResponsegetParsedAuthenticatorData()Lcom/yubico/webauthn/data/AuthenticatorData;126org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::getParsedAuthenticatorData +AuthenticatorAttachment.javacom.yubico.webauthn.data.AuthenticatorAttachmentfromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorAttachment;92org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.EnumsSpecnegated conditional +AuthenticatorAttachment.javacom.yubico.webauthn.data.AuthenticatorAttachmentfromJsonString(Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorAttachment;93org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator185com.yubico.webauthn.data.JsonIoSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAttachment::fromJsonString +AuthenticatorAttachment.javacom.yubico.webauthn.data.AuthenticatorAttachmentfromValue(Ljava/lang/String;)Ljava/util/Optional;87org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.EnumsSpecnegated conditional +AuthenticatorAttachment.javacom.yubico.webauthn.data.AuthenticatorAttachmentfromValue(Ljava/lang/String;)Ljava/util/Optional;88org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator197com.yubico.webauthn.data.JsonIoSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAttachment::fromValue +AuthenticatorAttachment.javacom.yubico.webauthn.data.AuthenticatorAttachmentlambda$fromValue$0(Ljava/lang/String;Lcom/yubico/webauthn/data/AuthenticatorAttachment;)Z88org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71com.yubico.webauthn.data.JsonIoSpecreplaced boolean return with false for com/yubico/webauthn/data/AuthenticatorAttachment::lambda$fromValue$0 +AuthenticatorAttachment.javacom.yubico.webauthn.data.AuthenticatorAttachmentlambda$fromValue$0(Ljava/lang/String;Lcom/yubico/webauthn/data/AuthenticatorAttachment;)Z88org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71com.yubico.webauthn.data.EnumsSpecreplaced boolean return with true for com/yubico/webauthn/data/AuthenticatorAttachment::lambda$fromValue$0 +CredentialRepositoryV1ToV2Adapter.javacom.yubico.webauthn.CredentialRepositoryV1ToV2AdaptercredentialIdExists(Lcom/yubico/webauthn/data/ByteArray;)Z31org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator82com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +CredentialRepositoryV1ToV2Adapter.javacom.yubico.webauthn.CredentialRepositoryV1ToV2AdaptercredentialIdExists(Lcom/yubico/webauthn/data/ByteArray;)Z31org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator165com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced boolean return with true for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::credentialIdExists +CredentialRepositoryV1ToV2Adapter.javacom.yubico.webauthn.CredentialRepositoryV1ToV2AdaptergetCredentialDescriptorsForUserHandle(Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Set;18org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator254replaced return value with Collections.emptySet for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getCredentialDescriptorsForUserHandle +CredentialRepositoryV1ToV2Adapter.javacom.yubico.webauthn.CredentialRepositoryV1ToV2AdaptergetUserHandleForUsername(Ljava/lang/String;)Ljava/util/Optional;36org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator71com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getUserHandleForUsername +CredentialRepositoryV1ToV2Adapter.javacom.yubico.webauthn.CredentialRepositoryV1ToV2AdaptergetUsernameForUserHandle(Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;41org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator71com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getUsernameForUserHandle +CredentialRepositoryV1ToV2Adapter.javacom.yubico.webauthn.CredentialRepositoryV1ToV2Adapterlookup(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;26org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::lookup +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionStepsbegin()Lcom/yubico/webauthn/FinishAssertionSteps$Step5;109org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps::begin +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionStepsfromV1(Lcom/yubico/webauthn/RelyingParty;Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/FinishAssertionSteps;75org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator6214com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps::fromV1 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionStepsgetUsernameForUserHandle(Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional;105org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps::getUsernameForUserHandle +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionStepslambda$getUsernameForUserHandle$0(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/UsernameRepository;)Ljava/util/Optional;105org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps::lambda$getUsernameForUserHandle$0 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionStepsrun()Lcom/yubico/webauthn/AssertionResult;113org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator62com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps::run +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionStepsrunV2()Lcom/yubico/webauthn/AssertionResultV2;117org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator62com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps::runV2 +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilderappid(Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder;153org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest)replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::appid +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilderappid(Ljava/util/Optional;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder;126org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest)negated conditional +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilderappid(Ljava/util/Optional;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder;127org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest)replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::appid +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilderlargeBlob(Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder;172org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::largeBlob +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilderuvm()Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder;183org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator101com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::uvm +AssertionExtensionInputs.javacom.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilderuvm(Ljava/lang/Boolean;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder;189org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::uvm +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Stepnext()Lcom/yubico/webauthn/FinishRegistrationSteps$Step;141org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/webauthn/FinishRegistrationSteps$Step::validate +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Stepnext()Lcom/yubico/webauthn/FinishRegistrationSteps$Step;142org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator92com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::next +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Steprun()Lcom/yubico/webauthn/RegistrationResult;146org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Steprun()Lcom/yubico/webauthn/RegistrationResult;147org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator135com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::run +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Steprun()Lcom/yubico/webauthn/RegistrationResult;149org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator208com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::run +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuildercertStore(Ljava/security/cert/CertStore;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder;233org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator140com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::certStore +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilderenableRevocationChecking(Z)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder;246org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator140com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::enableRevocationChecking +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilderpolicyTreeValidator(Ljava/util/function/Predicate;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder;276org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator140com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::policyTreeValidator +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuildertrustRoots(Ljava/util/Set;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder;210org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuildertrustRoots(Ljava/util/Set;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder;214org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator213com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::trustRoots +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms;592org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator152com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms;596org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator407com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms;592org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator356com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms;596org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator6011com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParmsparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms;604org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator7815com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms::parse +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponse<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V87org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponse<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V88org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponse<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V89org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponsebuilder()Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages;111org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse::builder +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponsegetUserHandle()Ljava/util/Optional;107org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionResponse::getUserHandle +VersionInfo.javacom.yubico.webauthn.meta.VersionInfofindValueInManifest(Ljava/lang/String;)Ljava/lang/String;82org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator165negated conditional +VersionInfo.javacom.yubico.webauthn.meta.VersionInfofindValueInManifest(Ljava/lang/String;)Ljava/lang/String;86org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4112negated conditional +VersionInfo.javacom.yubico.webauthn.meta.VersionInfofindValueInManifest(Ljava/lang/String;)Ljava/lang/String;87org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator4815replaced return value with "" for com/yubico/webauthn/meta/VersionInfo::findValueInManifest +VersionInfo.javacom.yubico.webauthn.meta.VersionInfogetInstance()Lcom/yubico/webauthn/meta/VersionInfo;49org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +VersionInfo.javacom.yubico.webauthn.meta.VersionInfogetInstance()Lcom/yubico/webauthn/meta/VersionInfo;57org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator295replaced return value with null for com/yubico/webauthn/meta/VersionInfo::getInstance +ClientAssertionExtensionOutputs.javacom.yubico.webauthn.data.ClientAssertionExtensionOutputsgetAppid()Ljava/util/Optional;100org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Optional.empty for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getAppid +ClientAssertionExtensionOutputs.javacom.yubico.webauthn.data.ClientAssertionExtensionOutputsgetExtensionIds()Ljava/util/Set;81org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator111com.yubico.webauthn.data.ExtensionsSpecnegated conditional +ClientAssertionExtensionOutputs.javacom.yubico.webauthn.data.ClientAssertionExtensionOutputsgetExtensionIds()Ljava/util/Set;84org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator234com.yubico.webauthn.data.ExtensionsSpecnegated conditional +ClientAssertionExtensionOutputs.javacom.yubico.webauthn.data.ClientAssertionExtensionOutputsgetExtensionIds()Ljava/util/Set;87org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator347com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Collections.emptySet for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getExtensionIds +ClientAssertionExtensionOutputs.javacom.yubico.webauthn.data.ClientAssertionExtensionOutputsgetLargeBlob()Ljava/util/Optional;114org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getLargeBlob +AttestedCredentialData.javacom.yubico.webauthn.data.AttestedCredentialData<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V60org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestedCredentialData.javacom.yubico.webauthn.data.AttestedCredentialData<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V61org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestedCredentialData.javacom.yubico.webauthn.data.AttestedCredentialData<init>(Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V62org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecnegated conditional +AttestedCredentialData.javacom.yubico.webauthn.data.AttestedCredentialDatabuilder()Lcom/yubico/webauthn/data/AttestedCredentialData$AttestedCredentialDataBuilder;69org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecreplaced return value with null for com/yubico/webauthn/data/AttestedCredentialData::builder +FinishAssertionOptions.javacom.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuildercallerTokenBindingId(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder;164org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +FinishAssertionOptions.javacom.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuildercallerTokenBindingId(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder;165org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator175replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder::callerTokenBindingId +FinishAssertionOptions.javacom.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuildercallerTokenBindingId(Ljava/util/Optional;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder;152org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +FinishAssertionOptions.javacom.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuildercallerTokenBindingId(Ljava/util/Optional;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder;154org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator224com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder::callerTokenBindingId +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptionsgetTimeout()Ljava/util/Optional;162org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getTimeout +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptionsgetUserHandle()Ljava/util/Optional;133org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUserHandle +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptionsgetUserVerification()Ljava/util/Optional;148org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUserVerification +StartAssertionOptions.javacom.yubico.webauthn.StartAssertionOptionsgetUsername()Ljava/util/Optional;105org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUsername +FinishRegistrationOptions.javacom.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuildercallerTokenBindingId(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder;131org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +FinishRegistrationOptions.javacom.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuildercallerTokenBindingId(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder;132org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator175replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder::callerTokenBindingId +FinishRegistrationOptions.javacom.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuildercallerTokenBindingId(Ljava/util/Optional;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder;119org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationOptions.javacom.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuildercallerTokenBindingId(Ljava/util/Optional;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder;121org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator224com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder::callerTokenBindingId +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step6clientData()Lcom/yubico/webauthn/data/CollectedClientData;171org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator93com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step6::clientData +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step6nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step7;167org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator102com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step6::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step6validate()V162org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step6validate()V162org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator164removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step11clientDataJsonHash()Lcom/yubico/webauthn/data/ByteArray;256org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator104com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step11::clientDataJsonHash +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step11nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step12;252org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator102com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step11::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step11validate()V247org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator72com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step11validate()V247org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator185removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step12attestation()Lcom/yubico/webauthn/data/AttestationObject;275org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator93com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step12::attestation +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step12nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step13;271org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator122com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step12::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step12validate()V266org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step12validate()V266org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator164removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +UserIdentity.javacom.yubico.webauthn.data.UserIdentity<init>(Ljava/lang/String;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V106org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)negated conditional +UserIdentity.javacom.yubico.webauthn.data.UserIdentity<init>(Ljava/lang/String;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V107org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)negated conditional +UserIdentity.javacom.yubico.webauthn.data.UserIdentity<init>(Ljava/lang/String;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V108org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator287com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)negated conditional +UserIdentity.javacom.yubico.webauthn.data.UserIdentitybuilder()Lcom/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages;115org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)replaced return value with null for com/yubico/webauthn/data/UserIdentity::builder +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step20lambda$validate$0(Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/IllegalArgumentException;589org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator182replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::lambda$validate$0 +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step20nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step21;599org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step20signedBytes()Lcom/yubico/webauthn/data/ByteArray;603org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator124com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::signedBytes +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step20validate()V592org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8418com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step16lambda$validate$0(ILcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z359org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator92com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step16lambda$validate$0(ILcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z359org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator175com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step16::lambda$validate$0 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step16nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step18;374org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step16::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step16validate()V357org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator8723com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step10clientData()Lcom/yubico/webauthn/data/CollectedClientData;345org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator93com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step10::clientData +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step10nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step11;341org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step10::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step10validate()V336org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step10validate()V336org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator164removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step15nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step16;458org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step15::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step15validate()V445org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4714com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step15validate()V438org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator247com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step15validate()V446org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7223com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step19clientDataJsonHash()Lcom/yubico/webauthn/data/ByteArray;558org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator104com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step19::clientDataJsonHash +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step19nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step20;554org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step19::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step19validate()V549org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator72com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step19validate()V549org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator185removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +ClientAssertionExtensionOutputs.javacom.yubico.webauthn.data.ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilderappid(Ljava/lang/Boolean;)Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder;139org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.data.BuildersSpecreplaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid +ClientAssertionExtensionOutputs.javacom.yubico.webauthn.data.ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilderappid(Ljava/util/Optional;)Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder;129org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest)negated conditional +ClientAssertionExtensionOutputs.javacom.yubico.webauthn.data.ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilderappid(Ljava/util/Optional;)Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder;131org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator224com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest)replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid +ClientAssertionExtensionOutputs.javacom.yubico.webauthn.data.ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilderappid(Z)Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder;153org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator83com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest)replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid +DocumentStatus.javacom.yubico.webauthn.meta.DocumentStatusfromString(Ljava/lang/String;)Ljava/util/Optional;53org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +DocumentStatus.javacom.yubico.webauthn.meta.DocumentStatusfromString(Ljava/lang/String;)Ljava/util/Optional;54org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator197replaced return value with Optional.empty for com/yubico/webauthn/meta/DocumentStatus::fromString +DocumentStatus.javacom.yubico.webauthn.meta.DocumentStatuslambda$fromString$0(Ljava/lang/String;Lcom/yubico/webauthn/meta/DocumentStatus;)Z54org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator71replaced boolean return with false for com/yubico/webauthn/meta/DocumentStatus::lambda$fromString$0 +DocumentStatus.javacom.yubico.webauthn.meta.DocumentStatuslambda$fromString$0(Ljava/lang/String;Lcom/yubico/webauthn/meta/DocumentStatus;)Z54org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator71replaced boolean return with true for com/yubico/webauthn/meta/DocumentStatus::lambda$fromString$0 +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationOutputgetBlob()Ljava/util/Optional;418org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::getBlob +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationOutputgetWritten()Ljava/util/Optional;435org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::getWritten +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationOutputread(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput;385org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81com.yubico.webauthn.data.ExtensionsSpecreplaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::read +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationOutputwrite(Z)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput;401org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator92com.yubico.webauthn.data.ExtensionsSpecreplaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::write +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$PendingStep16nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step18;524org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$PendingStep16::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$PendingStep16validate()V513org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator92com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$PendingStep16validate()V515org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator2810com.yubico.webauthn.RelyingPartyV2AssertionSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$PendingStep16validate()V512org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7320com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuildertransports(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder;150org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuildertransports(Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder;151org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder::transports +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuildertransports(Ljava/util/Set;)Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder;163org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder::transports +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationStepsbegin()Lcom/yubico/webauthn/FinishRegistrationSteps$Step6;124org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::begin +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationStepsfromV1(Lcom/yubico/webauthn/RelyingParty;Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/FinishRegistrationSteps;94org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator5614com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::fromV1 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationStepsrun()Lcom/yubico/webauthn/RegistrationResult;128org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator62com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::run +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilderuserHandle(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder;177org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder::userHandle +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilderuserHandle(Ljava/util/Optional;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder;165org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilderuserHandle(Ljava/util/Optional;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder;166org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder::userHandle +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$FinishednextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Finished;655org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Finished::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Finishedresult()Ljava/util/Optional;660org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator264com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Finished::result +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$FinishedresultV2()Ljava/util/Optional;670org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator193com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Finished::resultV2 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step22nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Finished;656org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator141com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step22::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step22validate()V649org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator134com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step22validate()V648org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator359com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilderpublicKeyCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder;407org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilderpublicKeyCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder;409org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder::publicKeyCose +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilderpublicKeyEs256Raw(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder;429org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.webauthn.RelyingPartyAssertionSpecreplaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder::publicKeyEs256Raw +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilderauthenticatorAttachment(Lcom/yubico/webauthn/data/AuthenticatorAttachment;)Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder;223org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator90com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)replaced return value with null for com/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder::authenticatorAttachment +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilderauthenticatorAttachment(Ljava/util/Optional;)Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder;210org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)negated conditional +AuthenticatorSelectionCriteria.javacom.yubico.webauthn.data.AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilderauthenticatorAttachment(Ljava/util/Optional;)Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder;211org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator195com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest)replaced return value with null for com/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder::authenticatorAttachment +PublicKeyCredentialParameters.javacom.yubico.webauthn.data.PublicKeyCredentialParameters<init>(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V55org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81com.yubico.webauthn.data.BuildersSpecnegated conditional +PublicKeyCredentialParameters.javacom.yubico.webauthn.data.PublicKeyCredentialParameters<init>(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V56org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.data.BuildersSpecnegated conditional +PublicKeyCredentialParameters.javacom.yubico.webauthn.data.PublicKeyCredentialParametersbuilder()Lcom/yubico/webauthn/data/PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder$MandatoryStages;118org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.BuildersSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialParameters::builder +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptionsbuilder()Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder$MandatoryStages;90org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/StartRegistrationOptions::builder +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptionsgetAuthenticatorSelection()Ljava/util/Optional;72org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/StartRegistrationOptions::getAuthenticatorSelection +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptionsgetTimeout()Ljava/util/Optional;86org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyStartOperationSpecreplaced return value with Optional.empty for com/yubico/webauthn/StartRegistrationOptions::getTimeout +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step15nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step16;336org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step15::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step15validate()V326org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator184com.yubico.webauthn.RelyingPartyCeremoniesSpecnegated conditional +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step15validate()V328org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator369com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step11nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step12;368org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step11::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step11validate()V358org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step11validate()V359org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator417com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step17nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$PendingStep16;499org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step17::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step17validate()V490org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator175com.yubico.webauthn.RelyingPartyUserIdentificationSpecnegated conditional +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step17validate()V491org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator3510com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +RelyingPartyIdentity.javacom.yubico.webauthn.data.RelyingPartyIdentity<init>(Ljava/lang/String;Ljava/lang/String;)V70org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator61com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)negated conditional +RelyingPartyIdentity.javacom.yubico.webauthn.data.RelyingPartyIdentity<init>(Ljava/lang/String;Ljava/lang/String;)V70org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator154com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)negated conditional +RelyingPartyIdentity.javacom.yubico.webauthn.data.RelyingPartyIdentitybuilder()Lcom/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages;76org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity::builder +CredentialRecord.javacom.yubico.webauthn.CredentialRecordcosePublicKeyFromEs256Raw(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray;223org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator51com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with null for com/yubico/webauthn/CredentialRecord::cosePublicKeyFromEs256Raw +CredentialRecord.javacom.yubico.webauthn.CredentialRecordtoPublicKeyCredentialDescriptor()Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;195org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator196com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/CredentialRecord::toPublicKeyCredentialDescriptor +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsAttestparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;668org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator334com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsAttestparse([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;675org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator598com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionOptions.javacom.yubico.webauthn.FinishAssertionOptionsbuilder()Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages;110org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionOptions::builder +FinishAssertionOptions.javacom.yubico.webauthn.FinishAssertionOptionsgetCallerTokenBindingId()Ljava/util/Optional;106org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2AssertionSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionOptions::getCallerTokenBindingId +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2credentialRepository(Lcom/yubico/webauthn/CredentialRepository;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder;612org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2::credentialRepository +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2credentialRepositoryV2(Lcom/yubico/webauthn/CredentialRepositoryV2;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder;632org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator93com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2::credentialRepositoryV2 +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step7nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step8;190org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator101com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step7::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step7validate()V181org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator273com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step9nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step10;224org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator101com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step9::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step9validate()V216org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator315com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step8nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step9;205org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator101com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step8::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step8validate()V200org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator144com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishRegistrationOptions.javacom.yubico.webauthn.FinishRegistrationOptionsbuilder()Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages;75org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationOptions::builder +FinishRegistrationOptions.javacom.yubico.webauthn.FinishRegistrationOptionsgetCallerTokenBindingId()Ljava/util/Optional;71org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationOptions::getCallerTokenBindingId +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step13nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step14;294org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step13::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step13validate()V286org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator258com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step14nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step15;312org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step14::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step14validate()V305org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator184com.yubico.webauthn.RelyingPartyV2RegistrationSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1trustRoots(Ljava/util/Set;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder;197org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecnegated conditional +AttestationTrustSource.javacom.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1trustRoots(Ljava/util/Set;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder;198org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator185com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1::trustRoots +NoneAttestationStatementVerifier.javacom.yubico.webauthn.NoneAttestationStatementVerifiergetAttestationType(Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType;35org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/NoneAttestationStatementVerifier::getAttestationType +NoneAttestationStatementVerifier.javacom.yubico.webauthn.NoneAttestationStatementVerifierverifyAttestationSignature(Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z41org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator40com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced boolean return with false for com/yubico/webauthn/NoneAttestationStatementVerifier::verifyAttestationSignature +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3publicKeyCose(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder;362org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3::publicKeyCose +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3publicKeyEs256Raw(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder;381org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator93com.yubico.webauthn.RelyingPartyAssertionSpecreplaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3::publicKeyEs256Raw +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step12nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step13;389org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step12::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step12validate()V379org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator298com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step13nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step14;409org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step13::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step13validate()V401org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator358com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step16nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step17;476org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step16::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step16validate()V469org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator184com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$FinishednextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Finished;676org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Finished::nextStep +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Finishedresult()Ljava/util/Optional;681org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator203com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Finished::result +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step7nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step8;283org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step7::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step7validate()V288org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator273com.yubico.webauthn.RelyingPartyV2AssertionSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +AndroidSafetynetAttestationStatementVerifier.javacom.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustomgetX5c(Lcom/fasterxml/jackson/databind/JsonNode;)Ljava/util/List;186org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator3811com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with Collections.emptyList for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom::getX5c +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccPointparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccPoint;625org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator287com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccPoint::parse +PublicKeyCredentialParameters.javacom.yubico.webauthn.data.PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder$MandatoryStagesalg(Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Lcom/yubico/webauthn/data/PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder;133org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.data.BuildersSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder$MandatoryStages::alg +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStagesid(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step2;164org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages::id +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step4pubKeyCredParams(Ljava/util/List;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder;290org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step4::pubKeyCredParams +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step3challenge(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step4;277org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator163com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step3::challenge +AttestationObject.javacom.yubico.webauthn.data.AttestationObject$JsonSerializerserialize(Lcom/yubico/webauthn/data/AttestationObject;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V167org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator72com.yubico.webauthn.data.JsonIoSpecremoved call to com/fasterxml/jackson/core/JsonGenerator::writeString +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step2user(Lcom/yubico/webauthn/data/UserIdentity;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step3;264org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator163com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step2::user +FinishAssertionOptions.javacom.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStagesrequest(Lcom/yubico/webauthn/AssertionRequest;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages$Step2;127org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages::request +PublicKeyCredentialDescriptor.javacom.yubico.webauthn.data.PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder$MandatoryStagesid(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder;138org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder$MandatoryStages::id +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStagesauthenticatorData(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step2;129org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages::authenticatorData +RelyingParty.javacom.yubico.webauthn.RelyingParty$RelyingPartyBuilder$MandatoryStagesidentity(Lcom/yubico/webauthn/data/RelyingPartyIdentity;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2;600org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages::identity +RelyingPartyIdentity.javacom.yubico.webauthn.data.RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages$Step2name(Ljava/lang/String;)Lcom/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder;110org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages$Step2::name +AppId.javacom.yubico.webauthn.extension.appid.AppId$JsonSerializerserialize(Lcom/yubico/webauthn/extension/appid/AppId;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V115org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator61com.yubico.webauthn.extension.appid.AppIdTest.jsonEncode(com.yubico.webauthn.extension.appid.AppIdTest)removed call to com/fasterxml/jackson/core/JsonGenerator::writeString +UserIdentity.javacom.yubico.webauthn.data.UserIdentity$UserIdentityBuilder$MandatoryStages$Step3id(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/UserIdentity$UserIdentityBuilder;152org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step3::id +UserIdentity.javacom.yubico.webauthn.data.UserIdentity$UserIdentityBuilder$MandatoryStages$Step2displayName(Ljava/lang/String;)Lcom/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step3;141org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator163com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step2::displayName +AuthenticatorResponse.javacom.yubico.webauthn.data.AuthenticatorResponsegetParsedAuthenticatorData()Lcom/yubico/webauthn/data/AuthenticatorData;48org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82replaced return value with null for com/yubico/webauthn/data/AuthenticatorResponse::getParsedAuthenticatorData +TpmAttestationStatementVerifier.javacom.yubico.webauthn.TpmAttestationStatementVerifier$Tpm2bPublicKeyRsaparse(Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$Tpm2bPublicKeyRsa;581org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator134com.yubico.webauthn.RelyingPartyV2RegistrationSpecreplaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$Tpm2bPublicKeyRsa::parse +RelyingPartyIdentity.javacom.yubico.webauthn.data.RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStagesid(Ljava/lang/String;)Lcom/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages$Step2;98org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest)replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages::id +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step3clientExtensionResults(Lcom/yubico/webauthn/data/ClientExtensionOutputs;)Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder;188org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step3::clientExtensionResults +AssertionRequest.javacom.yubico.webauthn.AssertionRequest$AssertionRequestBuilder$MandatoryStagespublicKeyCredentialRequestOptions(Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder;218org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder$MandatoryStages::publicKeyCredentialRequestOptions +FinishRegistrationOptions.javacom.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages$Step2response(Lcom/yubico/webauthn/data/PublicKeyCredential;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder;107org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages$Step2::response +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobRegistrationInput$LargeBlobSupportvalues()Ljava/util/Set;210org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator173com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Collections.emptySet for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationInput$LargeBlobSupport::values +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step2response(Lcom/yubico/webauthn/data/AuthenticatorResponse;)Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step3;176org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator163com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step2::response +UserIdentity.javacom.yubico.webauthn.data.UserIdentity$UserIdentityBuilder$MandatoryStagesname(Ljava/lang/String;)Lcom/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step2;130org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest)replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages::name +CollectedClientData.javacom.yubico.webauthn.data.CollectedClientData$JsonSerializerserialize(Lcom/yubico/webauthn/data/CollectedClientData;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V148org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator72com.yubico.webauthn.data.JsonIoSpecremoved call to com/fasterxml/jackson/core/JsonGenerator::writeString +PublicKeyCredentialCreationOptions.javacom.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStagesrp(Lcom/yubico/webauthn/data/RelyingPartyIdentity;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step2;252org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest)replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages::rp +StartRegistrationOptions.javacom.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder$MandatoryStagesuser(Lcom/yubico/webauthn/data/UserIdentity;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder;106org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest)replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder$MandatoryStages::user +AuthenticatorData.javacom.yubico.webauthn.data.AuthenticatorData$JsonSerializerserialize(Lcom/yubico/webauthn/data/AuthenticatorData;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V268org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator72com.yubico.webauthn.data.JsonIoSpecremoved call to com/fasterxml/jackson/core/JsonGenerator::writeString +FinishAssertionOptions.javacom.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages$Step2response(Lcom/yubico/webauthn/data/PublicKeyCredential;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder;140org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages$Step2::response +FinishRegistrationSteps.javacom.yubico.webauthn.FinishRegistrationSteps$Step10nextStep()Lcom/yubico/webauthn/FinishRegistrationSteps$Step11;239org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step10::nextStep +AuthenticatorAttestationResponse.javacom.yubico.webauthn.data.AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStagesattestationObject(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages$Step2;146org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages::attestationObject +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step2userHandle(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3;336org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator163com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step2::userHandle +FinishRegistrationOptions.javacom.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStagesrequest(Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages$Step2;93org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyCeremoniesSpecreplaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages::request +Extensions.javacom.yubico.webauthn.data.Extensions$CredentialProperties$CredentialPropertiesOutputgetRk()Ljava/util/Optional;104org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61com.yubico.webauthn.data.ExtensionsSpecreplaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$CredentialProperties$CredentialPropertiesOutput::getRk +Specification.javacom.yubico.webauthn.meta.Specificationbuilder()Lcom/yubico/webauthn/meta/Specification$SpecificationBuilder;53org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator61replaced return value with null for com/yubico/webauthn/meta/Specification::builder +RegisteredCredential.javacom.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder$MandatoryStagescredentialId(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step2;324org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator142com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages::credentialId +AuthenticatorAttestationResponse.javacom.yubico.webauthn.data.AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages$Step2clientDataJSON(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder;157org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.data.AuthenticatorAttestationResponseSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages$Step2::clientDataJSON +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step14nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step15;426org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step14::nextStep +FinishAssertionSteps.javacom.yubico.webauthn.FinishAssertionSteps$Step18nextStep()Lcom/yubico/webauthn/FinishAssertionSteps$Step19;538org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator121com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step18::nextStep +PublicKeyCredential.javacom.yubico.webauthn.data.PublicKeyCredential$PublicKeyCredentialBuilderstart()Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages;150org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder::start +PublicKeyCredentialRequestOptions.javacom.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder$MandatoryStageschallenge(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder;183org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder$MandatoryStages::challenge +Extensions.javacom.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobRegistrationOutputsupported(Z)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationOutput;349org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71com.yubico.webauthn.data.ExtensionsSpecreplaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationOutput::supported +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step2clientDataJSON(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step3;141org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator163com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step2::clientDataJSON +AuthenticatorAssertionResponse.javacom.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step3signature(Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder;153org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.webauthn.RelyingPartyUserIdentificationSpecreplaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step3::signature + diff --git a/mutation-coverage-reports/webauthn-server-core/style.css b/mutation-coverage-reports/webauthn-server-core/style.css new file mode 100644 index 000000000..303bfba78 --- /dev/null +++ b/mutation-coverage-reports/webauthn-server-core/style.css @@ -0,0 +1,563 @@ +html, body, div, span, p, blockquote, pre { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} + +body{ + line-height: 1; + color: black; + background: white; + margin-left: 20px; +} + +.src { + border: 1px solid #dddddd; + padding-top: 10px; + padding-right: 5px; + padding-left: 5px; + font-family: Consolas, Courier, monospace; +} + +.covered, .COVERED { + background-color: #ddffdd; +} + +.uncovered, .UNCOVERED { + background-color: #ffdddd; +} + +.killed, .KILLED { + background-color: #aaffaa; +} + +.survived, .SURVIVED { + background-color: #ffaaaa; +} + +.uncertain, .UNCERTAIN { + background-color: #dde7ef; +} + +.run_error, .RUN_ERROR { + background-color: #dde7ef; +} + +.na { + background-color: #eeeeee; +} + +.timed_out, .TIMED_OUT { + background-color: #dde7ef; +} + +.non_viable, .NON_VIABLE { + background-color: #aaffaa; +} + +.memory_error, .MEMORY_ERROR { + background-color: #dde7ef; +} + +.not_started, .NO_STARTED { + background-color: #dde7ef; color : red +} + +.no_coverage, .NO_COVERAGE { + background-color: #ffaaaa; +} + +.tests { + width: 50%; + float: left; +} + +.mutees { + float: right; + width: 50%; +} + +.unit { + padding-top: 20px; + clear: both; +} + +.coverage_bar { + display: inline-block; + height: 1.1em; + width: 130px; + background: #FAA; + margin: 0 5px; + vertical-align: middle; + border: 1px solid #AAA; + position: relative; +} + +.coverage_complete { + display: inline-block; + height: 100%; + background: #DFD; + float: left; +} + +.coverage_legend { + position: absolute; + height: 100%; + width: 100%; + left: 0; + top: 0; + text-align: center; +} + +.line, .mut { + vertical-align: middle; +} + +.coverage_percentage { + display: inline-block; + width: 3em; + text-align: right; +} + +.pop { + outline:none; +} + +.pop strong { + line-height: 30px; +} + +.pop { + text-decoration: none; +} + +.pop span { + z-index: 10; + display: none; + padding: 14px 20px; + margin-top: -30px; + margin-left: 28px; + width: 800px; + line-height: 16px; + word-wrap: break-word; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + -moz-box-shadow: 5px 5px 8px #CCC; + -webkit-box-shadow: 5px 5px 8px #CCC; + box-shadow: 5px 5px 8px #CCC; +} + +.pop:hover span { + display: inline; + position: absolute; + color: #111; + border: 1px solid #DCA; + background: #fffAF0; +} + +.width-1 { + width: 1%; +} + +.width-2 { + width: 2%; +} + +.width-3 { + width: 3%; +} + +.width-4 { + width: 4%; +} + +.width-5 { + width: 5%; +} + +.width-6 { + width: 6%; +} + +.width-7 { + width: 7%; +} + +.width-8 { + width: 8%; +} + +.width-9 { + width: 9%; +} + +.width-10 { + width: 10%; +} + +.width-11 { + width: 11%; +} + +.width-12 { + width: 12%; +} + +.width-13 { + width: 13%; +} + +.width-14 { + width: 14%; +} + +.width-15 { + width: 15%; +} + +.width-16 { + width: 16%; +} + +.width-17 { + width: 17%; +} + +.width-18 { + width: 18%; +} + +.width-19 { + width: 19%; +} + +.width-20 { + width: 20%; +} + +.width-21 { + width: 21%; +} + +.width-22 { + width: 22%; +} + +.width-23 { + width: 23%; +} + +.width-24 { + width: 24%; +} + +.width-25 { + width: 25%; +} + +.width-26 { + width: 26%; +} + +.width-27 { + width: 27%; +} + +.width-28 { + width: 28%; +} + +.width-29 { + width: 29%; +} + +.width-30 { + width: 30%; +} + +.width-31 { + width: 31%; +} + +.width-32 { + width: 32%; +} + +.width-33 { + width: 33%; +} + +.width-34 { + width: 34%; +} + +.width-35 { + width: 35%; +} + +.width-36 { + width: 36%; +} + +.width-37 { + width: 37%; +} + +.width-38 { + width: 38%; +} + +.width-39 { + width: 39%; +} + +.width-40 { + width: 40%; +} + +.width-41 { + width: 41%; +} + +.width-42 { + width: 42%; +} + +.width-43 { + width: 43%; +} + +.width-44 { + width: 44%; +} + +.width-45 { + width: 45%; +} + +.width-46 { + width: 46%; +} + +.width-47 { + width: 47%; +} + +.width-48 { + width: 48%; +} + +.width-49 { + width: 49%; +} + +.width-50 { + width: 50%; +} + +.width-51 { + width: 51%; +} + +.width-52 { + width: 52%; +} + +.width-53 { + width: 53%; +} + +.width-54 { + width: 54%; +} + +.width-55 { + width: 55%; +} + +.width-56 { + width: 56%; +} + +.width-57 { + width: 57%; +} + +.width-58 { + width: 58%; +} + +.width-59 { + width: 59%; +} + +.width-60 { + width: 60%; +} + +.width-61 { + width: 61%; +} + +.width-62 { + width: 62%; +} + +.width-63 { + width: 63%; +} + +.width-64 { + width: 64%; +} + +.width-65 { + width: 65%; +} + +.width-66 { + width: 66%; +} + +.width-67 { + width: 67%; +} + +.width-68 { + width: 68%; +} + +.width-69 { + width: 69%; +} + +.width-70 { + width: 70%; +} + +.width-71 { + width: 71%; +} + +.width-72 { + width: 72%; +} + +.width-73 { + width: 73%; +} + +.width-74 { + width: 74%; +} + +.width-75 { + width: 75%; +} + +.width-76 { + width: 76%; +} + +.width-77 { + width: 77%; +} + +.width-78 { + width: 78%; +} + +.width-79 { + width: 79%; +} + +.width-80 { + width: 80%; +} + +.width-81 { + width: 81%; +} + +.width-82 { + width: 82%; +} + +.width-83 { + width: 83%; +} + +.width-84 { + width: 84%; +} + +.width-85 { + width: 85%; +} + +.width-86 { + width: 86%; +} + +.width-87 { + width: 87%; +} + +.width-88 { + width: 88%; +} + +.width-89 { + width: 89%; +} + +.width-90 { + width: 90%; +} + +.width-91 { + width: 91%; +} + +.width-92 { + width: 92%; +} + +.width-93 { + width: 93%; +} + +.width-94 { + width: 94%; +} + +.width-95 { + width: 95%; +} + +.width-96 { + width: 96%; +} + +.width-97 { + width: 97%; +} + +.width-98 { + width: 98%; +} + +.width-99 { + width: 99%; +} + +.width-100 { + width: 100%; +} \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/BinaryUtil.java.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/BinaryUtil.java.html new file mode 100644 index 000000000..5d219694b --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/BinaryUtil.java.html @@ -0,0 +1,3000 @@ + + + + + + + + + +

BinaryUtil.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.internal.util;
+ +26 + + + + + + +
+ +27 + + + + + + +
import java.io.IOException;
+ +28 + + + + + + +
import java.io.InputStream;
+ +29 + + + + + + +
import java.nio.ByteBuffer;
+ +30 + + + + + + +
import java.nio.ByteOrder;
+ +31 + + + + + + +
import java.util.Arrays;
+ +32 + + + + + + +
+ +33 + + + + + + +
public class BinaryUtil {
+ +34 + + + + + + +
+ +35 + + + + + + +
  public static byte[] copy(byte[] bytes) {
+ +36 + + +1 + +1. copy : replaced return value with null for com/yubico/internal/util/BinaryUtil::copy → NO_COVERAGE
+ +
+
+
    return Arrays.copyOf(bytes, bytes.length);
+ +37 + + + + + + +
  }
+ +38 + + + + + + +
+ +39 + + + + + + +
  /**
+ +40 + + + + + + +
   * @param bytes Bytes to encode
+ +41 + + + + + + +
   */
+ +42 + + + + + + +
  public static String toHex(final byte[] bytes) {
+ +43 + + +1 + +1. toHex : Replaced integer multiplication with division → KILLED
+ +
+
+
    final char[] digits = new char[bytes.length * 2];
+ +44 + + +2 + +1. toHex : negated conditional → KILLED
+2. toHex : changed conditional boundary → KILLED
+ +
+
+
    for (int i = 0; i < bytes.length; ++i) {
+ +45 + + +1 + +1. toHex : Replaced integer multiplication with division → KILLED
+ +
+
+
      final int i2 = i * 2;
+ +46 + + +2 + +1. toHex : Replaced Shift Right with Shift Left → KILLED
+2. toHex : Replaced bitwise AND with OR → KILLED
+ +
+
+
      digits[i2] = Character.forDigit((bytes[i] >> 4) & 0x0f, 16);
+ +47 + + +2 + +1. toHex : Replaced bitwise AND with OR → KILLED
+2. toHex : Replaced integer addition with subtraction → KILLED
+ +
+
+
      digits[i2 + 1] = Character.forDigit(bytes[i] & 0x0f, 16);
+ +48 + + + + + + +
    }
+ +49 + + +1 + +1. toHex : replaced return value with "" for com/yubico/internal/util/BinaryUtil::toHex → KILLED
+ +
+
+
    return new String(digits);
+ +50 + + + + + + +
  }
+ +51 + + + + + + +
+ +52 + + + + + + +
  /**
+ +53 + + + + + + +
   * @param hex String of hexadecimal digits to decode as bytes.
+ +54 + + + + + + +
   */
+ +55 + + + + + + +
  public static byte[] fromHex(final String hex) {
+ +56 + + +2 + +1. fromHex : negated conditional → KILLED
+2. fromHex : Replaced integer modulus with multiplication → KILLED
+ +
+
+
    if (hex.length() % 2 != 0) {
+ +57 + + + + + + +
      throw new IllegalArgumentException("Length of hex string is not even: " + hex);
+ +58 + + + + + + +
    }
+ +59 + + + + + + +
+ +60 + + +1 + +1. fromHex : Replaced integer division with multiplication → KILLED
+ +
+
+
    final byte[] result = new byte[hex.length() / 2];
+ +61 + + +2 + +1. fromHex : changed conditional boundary → KILLED
+2. fromHex : negated conditional → KILLED
+ +
+
+
    for (int i = 0; i < hex.length(); ++i) {
+ +62 + + + + + + +
      final int d = Character.digit(hex.charAt(i), 16);
+ +63 + + +2 + +1. fromHex : changed conditional boundary → KILLED
+2. fromHex : negated conditional → KILLED
+ +
+
+
      if (d < 0) {
+ +64 + + + + + + +
        throw new IllegalArgumentException("Invalid hex digit at index " + i + " in: " + hex);
+ +65 + + + + + + +
      }
+ +66 + + +6 + +1. fromHex : Replaced integer multiplication with division → KILLED
+2. fromHex : Replaced integer addition with subtraction → KILLED
+3. fromHex : Replaced Shift Left with Shift Right → KILLED
+4. fromHex : Replaced bitwise OR with AND → KILLED
+5. fromHex : Replaced integer modulus with multiplication → KILLED
+6. fromHex : Replaced integer division with multiplication → KILLED
+ +
+
+
      result[i / 2] |= d << (((i + 1) % 2) * 4);
+ +67 + + + + + + +
    }
+ +68 + + +1 + +1. fromHex : replaced return value with null for com/yubico/internal/util/BinaryUtil::fromHex → KILLED
+ +
+
+
    return result;
+ +69 + + + + + + +
  }
+ +70 + + + + + + +
+ +71 + + + + + + +
  /**
+ +72 + + + + + + +
   * Parse a single byte from two hexadecimal characters.
+ +73 + + + + + + +
   *
+ +74 + + + + + + +
   * @param hex String of hexadecimal digits to decode as bytes.
+ +75 + + + + + + +
   */
+ +76 + + + + + + +
  public static byte singleFromHex(String hex) {
+ +77 + + +1 + +1. singleFromHex : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → NO_COVERAGE
+ +
+
+
    ExceptionUtil.assertTrue(
+ +78 + + +1 + +1. singleFromHex : negated conditional → NO_COVERAGE
+ +
+
+
        hex.length() == 2, "Argument must be exactly 2 hexadecimal characters, was: %s", hex);
+ +79 + + +1 + +1. singleFromHex : replaced byte return with 0 for com/yubico/internal/util/BinaryUtil::singleFromHex → NO_COVERAGE
+ +
+
+
    return fromHex(hex)[0];
+ +80 + + + + + + +
  }
+ +81 + + + + + + +
+ +82 + + + + + + +
  /**
+ +83 + + + + + + +
   * Read one byte as an unsigned 8-bit integer.
+ +84 + + + + + + +
   *
+ +85 + + + + + + +
   * <p>Result is of type <code>short</code> because Java doesn't have unsigned types.
+ +86 + + + + + + +
   *
+ +87 + + + + + + +
   * @return A value between 0 and 255, inclusive.
+ +88 + + + + + + +
   */
+ +89 + + + + + + +
  public static short getUint8(byte b) {
+ +90 + + + + + + +
    // Prepend a zero so we can parse it as a signed int16 instead of a signed int8
+ +91 + + +1 + +1. getUint8 : replaced short return with 0 for com/yubico/internal/util/BinaryUtil::getUint8 → KILLED
+ +
+
+
    return ByteBuffer.wrap(new byte[] {0, b}).order(ByteOrder.BIG_ENDIAN).getShort();
+ +92 + + + + + + +
  }
+ +93 + + + + + + +
+ +94 + + + + + + +
  /**
+ +95 + + + + + + +
   * Read 2 bytes as a big endian unsigned 16-bit integer.
+ +96 + + + + + + +
   *
+ +97 + + + + + + +
   * <p>Result is of type <code>int</code> because Java doesn't have unsigned types.
+ +98 + + + + + + +
   *
+ +99 + + + + + + +
   * @return A value between 0 and 2^16- 1, inclusive.
+ +100 + + + + + + +
   */
+ +101 + + + + + + +
  public static int getUint16(byte[] bytes) {
+ +102 + + +1 + +1. getUint16 : negated conditional → KILLED
+ +
+
+
    if (bytes.length == 2) {
+ +103 + + + + + + +
      // Prepend zeroes so we can parse it as a signed int32 instead of a signed int16
+ +104 + + +1 + +1. getUint16 : replaced int return with 0 for com/yubico/internal/util/BinaryUtil::getUint16 → KILLED
+ +
+
+
      return ByteBuffer.wrap(new byte[] {0, 0, bytes[0], bytes[1]})
+ +105 + + + + + + +
          .order(ByteOrder.BIG_ENDIAN)
+ +106 + + + + + + +
          .getInt();
+ +107 + + + + + + +
    } else {
+ +108 + + + + + + +
      throw new IllegalArgumentException("Argument must be 2 bytes, was: " + bytes.length);
+ +109 + + + + + + +
    }
+ +110 + + + + + + +
  }
+ +111 + + + + + + +
+ +112 + + + + + + +
  /**
+ +113 + + + + + + +
   * Read 4 bytes as a big endian unsigned 32-bit integer.
+ +114 + + + + + + +
   *
+ +115 + + + + + + +
   * <p>Result is of type <code>long</code> because Java doesn't have unsigned types.
+ +116 + + + + + + +
   *
+ +117 + + + + + + +
   * @return A value between 0 and 2^32 - 1, inclusive.
+ +118 + + + + + + +
   */
+ +119 + + + + + + +
  public static long getUint32(byte[] bytes) {
+ +120 + + +1 + +1. getUint32 : negated conditional → KILLED
+ +
+
+
    if (bytes.length == 4) {
+ +121 + + + + + + +
      // Prepend zeroes so we can parse it as a signed int32 instead of a signed int16
+ +122 + + +1 + +1. getUint32 : replaced long return with 0 for com/yubico/internal/util/BinaryUtil::getUint32 → KILLED
+ +
+
+
      return ByteBuffer.wrap(new byte[] {0, 0, 0, 0, bytes[0], bytes[1], bytes[2], bytes[3]})
+ +123 + + + + + + +
          .order(ByteOrder.BIG_ENDIAN)
+ +124 + + + + + + +
          .getLong();
+ +125 + + + + + + +
    } else {
+ +126 + + + + + + +
      throw new IllegalArgumentException("Argument must be 4 bytes, was: " + bytes.length);
+ +127 + + + + + + +
    }
+ +128 + + + + + + +
  }
+ +129 + + + + + + +
+ +130 + + + + + + +
  public static byte[] encodeUint16(int value) {
+ +131 + + +3 + +1. encodeUint16 : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+2. encodeUint16 : changed conditional boundary → KILLED
+3. encodeUint16 : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(value >= 0, "Argument must be non-negative, was: %d", value);
+ +132 + + +3 + +1. encodeUint16 : changed conditional boundary → SURVIVED
+2. encodeUint16 : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED
+3. encodeUint16 : negated conditional → KILLED
+ +
+
+
    ExceptionUtil.assertTrue(
+ +133 + + + + + + +
        value < 65536, "Argument must be smaller than 2^16=65536, was: %d", value);
+ +134 + + + + + + +
+ +135 + + + + + + +
    ByteBuffer b = ByteBuffer.allocate(4);
+ +136 + + + + + + +
    b.order(ByteOrder.BIG_ENDIAN);
+ +137 + + + + + + +
    b.putInt(value);
+ +138 + + + + + + +
    b.rewind();
+ +139 + + +1 + +1. encodeUint16 : replaced return value with null for com/yubico/internal/util/BinaryUtil::encodeUint16 → KILLED
+ +
+
+
    return Arrays.copyOfRange(b.array(), 2, 4);
+ +140 + + + + + + +
  }
+ +141 + + + + + + +
+ +142 + + + + + + +
  public static byte[] encodeUint32(long value) {
+ +143 + + +3 + +1. encodeUint32 : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → NO_COVERAGE
+2. encodeUint32 : negated conditional → NO_COVERAGE
+3. encodeUint32 : changed conditional boundary → NO_COVERAGE
+ +
+
+
    ExceptionUtil.assertTrue(value >= 0, "Argument must be non-negative, was: %d", value);
+ +144 + + +3 + +1. encodeUint32 : removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → NO_COVERAGE
+2. encodeUint32 : negated conditional → NO_COVERAGE
+3. encodeUint32 : changed conditional boundary → NO_COVERAGE
+ +
+
+
    ExceptionUtil.assertTrue(
+ +145 + + + + + + +
        value < 4294967296L, "Argument must be smaller than 2^32=4294967296, was: %d", value);
+ +146 + + + + + + +
+ +147 + + + + + + +
    ByteBuffer b = ByteBuffer.allocate(8);
+ +148 + + + + + + +
    b.order(ByteOrder.BIG_ENDIAN);
+ +149 + + + + + + +
    b.putLong(value);
+ +150 + + + + + + +
    b.rewind();
+ +151 + + +1 + +1. encodeUint32 : replaced return value with null for com/yubico/internal/util/BinaryUtil::encodeUint32 → NO_COVERAGE
+ +
+
+
    return Arrays.copyOfRange(b.array(), 4, 8);
+ +152 + + + + + + +
  }
+ +153 + + + + + + +
+ +154 + + + + + + +
  public static byte[] readAll(InputStream is) throws IOException {
+ +155 + + + + + + +
    byte[] buffer = new byte[1024];
+ +156 + + + + + + +
    int bufferLen = 0;
+ +157 + + + + + + +
    while (true) {
+ +158 + + +1 + +1. readAll : Replaced integer subtraction with addition → NO_COVERAGE
+ +
+
+
      final int moreLen = is.read(buffer, bufferLen, buffer.length - bufferLen);
+ +159 + + +2 + +1. readAll : changed conditional boundary → NO_COVERAGE
+2. readAll : negated conditional → NO_COVERAGE
+ +
+
+
      if (moreLen <= 0) {
+ +160 + + +1 + +1. readAll : replaced return value with null for com/yubico/internal/util/BinaryUtil::readAll → NO_COVERAGE
+ +
+
+
        return Arrays.copyOf(buffer, bufferLen);
+ +161 + + + + + + +
      } else {
+ +162 + + +1 + +1. readAll : Replaced integer addition with subtraction → NO_COVERAGE
+ +
+
+
        bufferLen += moreLen;
+ +163 + + +1 + +1. readAll : negated conditional → NO_COVERAGE
+ +
+
+
        if (bufferLen == buffer.length) {
+ +164 + + +1 + +1. readAll : Replaced integer multiplication with division → NO_COVERAGE
+ +
+
+
          buffer = Arrays.copyOf(buffer, buffer.length * 2);
+ +165 + + + + + + +
        }
+ +166 + + + + + + +
      }
+ +167 + + + + + + +
    }
+ +168 + + + + + + +
  }
+ +169 + + + + + + +
}

Mutations

36 + + + +

1.1
Location : copy
Killed by : none
replaced return value with null for com/yubico/internal/util/BinaryUtil::copy → NO_COVERAGE

+
43 + + + +

1.1
Location : toHex
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
Replaced integer multiplication with division → KILLED

+
44 + + + +

1.1
Location : toHex
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
negated conditional → KILLED

2.2
Location : toHex
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
changed conditional boundary → KILLED

+
45 + + + +

1.1
Location : toHex
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
Replaced integer multiplication with division → KILLED

+
46 + + + +

1.1
Location : toHex
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
Replaced Shift Right with Shift Left → KILLED

2.2
Location : toHex
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
Replaced bitwise AND with OR → KILLED

+
47 + + + +

1.1
Location : toHex
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
Replaced bitwise AND with OR → KILLED

2.2
Location : toHex
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
Replaced integer addition with subtraction → KILLED

+
49 + + + +

1.1
Location : toHex
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
replaced return value with "" for com/yubico/internal/util/BinaryUtil::toHex → KILLED

+
56 + + + +

1.1
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
negated conditional → KILLED

2.2
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
Replaced integer modulus with multiplication → KILLED

+
60 + + + +

1.1
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
Replaced integer division with multiplication → KILLED

+
61 + + + +

1.1
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
changed conditional boundary → KILLED

2.2
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
negated conditional → KILLED

+
63 + + + +

1.1
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
changed conditional boundary → KILLED

2.2
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
negated conditional → KILLED

+
66 + + + +

1.1
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
Replaced integer multiplication with division → KILLED

2.2
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
Replaced integer addition with subtraction → KILLED

3.3
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
Replaced Shift Left with Shift Right → KILLED

4.4
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
Replaced bitwise OR with AND → KILLED

5.5
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
Replaced integer modulus with multiplication → KILLED

6.6
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
Replaced integer division with multiplication → KILLED

+
68 + + + +

1.1
Location : fromHex
Killed by : com.yubico.internal.util.BinaryUtilSpec
replaced return value with null for com/yubico/internal/util/BinaryUtil::fromHex → KILLED

+
77 + + + +

1.1
Location : singleFromHex
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → NO_COVERAGE

+
78 + + + +

1.1
Location : singleFromHex
Killed by : none
negated conditional → NO_COVERAGE

+
79 + + + +

1.1
Location : singleFromHex
Killed by : none
replaced byte return with 0 for com/yubico/internal/util/BinaryUtil::singleFromHex → NO_COVERAGE

+
91 + + + +

1.1
Location : getUint8
Killed by : com.yubico.internal.util.BinaryUtilSpec
replaced short return with 0 for com/yubico/internal/util/BinaryUtil::getUint8 → KILLED

+
102 + + + +

1.1
Location : getUint16
Killed by : com.yubico.internal.util.BinaryUtilSpec
negated conditional → KILLED

+
104 + + + +

1.1
Location : getUint16
Killed by : com.yubico.internal.util.BinaryUtilSpec
replaced int return with 0 for com/yubico/internal/util/BinaryUtil::getUint16 → KILLED

+
120 + + + +

1.1
Location : getUint32
Killed by : com.yubico.internal.util.BinaryUtilSpec
negated conditional → KILLED

+
122 + + + +

1.1
Location : getUint32
Killed by : com.yubico.internal.util.BinaryUtilSpec
replaced long return with 0 for com/yubico/internal/util/BinaryUtil::getUint32 → KILLED

+
131 + + + +

1.1
Location : encodeUint16
Killed by : com.yubico.internal.util.BinaryUtilSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

2.2
Location : encodeUint16
Killed by : com.yubico.internal.util.BinaryUtilSpec
changed conditional boundary → KILLED

3.3
Location : encodeUint16
Killed by : com.yubico.internal.util.BinaryUtilSpec
negated conditional → KILLED

+
132 + + + +

1.1
Location : encodeUint16
Killed by : com.yubico.internal.util.BinaryUtilSpec
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → KILLED

2.2
Location : encodeUint16
Killed by : none
changed conditional boundary → SURVIVED

3.3
Location : encodeUint16
Killed by : com.yubico.internal.util.BinaryUtilSpec
negated conditional → KILLED

+
139 + + + +

1.1
Location : encodeUint16
Killed by : com.yubico.internal.util.BinaryUtilSpec
replaced return value with null for com/yubico/internal/util/BinaryUtil::encodeUint16 → KILLED

+
143 + + + +

1.1
Location : encodeUint32
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → NO_COVERAGE

2.2
Location : encodeUint32
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : encodeUint32
Killed by : none
changed conditional boundary → NO_COVERAGE

+
144 + + + +

1.1
Location : encodeUint32
Killed by : none
removed call to com/yubico/internal/util/ExceptionUtil::assertTrue → NO_COVERAGE

2.2
Location : encodeUint32
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : encodeUint32
Killed by : none
changed conditional boundary → NO_COVERAGE

+
151 + + + +

1.1
Location : encodeUint32
Killed by : none
replaced return value with null for com/yubico/internal/util/BinaryUtil::encodeUint32 → NO_COVERAGE

+
158 + + + +

1.1
Location : readAll
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

+
159 + + + +

1.1
Location : readAll
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : readAll
Killed by : none
negated conditional → NO_COVERAGE

+
160 + + + +

1.1
Location : readAll
Killed by : none
replaced return value with null for com/yubico/internal/util/BinaryUtil::readAll → NO_COVERAGE

+
162 + + + +

1.1
Location : readAll
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

+
163 + + + +

1.1
Location : readAll
Killed by : none
negated conditional → NO_COVERAGE

+
164 + + + +

1.1
Location : readAll
Killed by : none
Replaced integer multiplication with division → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/ByteInputStream.java.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/ByteInputStream.java.html new file mode 100644 index 000000000..1d4b5921a --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/ByteInputStream.java.html @@ -0,0 +1,1047 @@ + + + + + + + + + +

ByteInputStream.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2014-2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.internal.util;
+ +26 + + + + + + +
+ +27 + + + + + + +
import java.io.ByteArrayInputStream;
+ +28 + + + + + + +
import java.io.DataInputStream;
+ +29 + + + + + + +
import java.io.IOException;
+ +30 + + + + + + +
+ +31 + + + + + + +
/** Provides an easy way to read a byte array in chunks. */
+ +32 + + + + + + +
public class ByteInputStream extends DataInputStream {
+ +33 + + + + + + +
+ +34 + + + + + + +
  public ByteInputStream(byte[] data) {
+ +35 + + + + + + +
    super(new ByteArrayInputStream(data));
+ +36 + + + + + + +
  }
+ +37 + + + + + + +
+ +38 + + + + + + +
  public byte[] read(int numberOfBytes) throws IOException {
+ +39 + + + + + + +
    byte[] readBytes = new byte[numberOfBytes];
+ +40 + + +1 + +1. read : removed call to com/yubico/internal/util/ByteInputStream::readFully → NO_COVERAGE
+ +
+
+
    readFully(readBytes);
+ +41 + + +1 + +1. read : replaced return value with null for com/yubico/internal/util/ByteInputStream::read → NO_COVERAGE
+ +
+
+
    return readBytes;
+ +42 + + + + + + +
  }
+ +43 + + + + + + +
+ +44 + + + + + + +
  public byte[] readAll() throws IOException {
+ +45 + + + + + + +
    byte[] readBytes = new byte[available()];
+ +46 + + +1 + +1. readAll : removed call to com/yubico/internal/util/ByteInputStream::readFully → NO_COVERAGE
+ +
+
+
    readFully(readBytes);
+ +47 + + +1 + +1. readAll : replaced return value with null for com/yubico/internal/util/ByteInputStream::readAll → NO_COVERAGE
+ +
+
+
    return readBytes;
+ +48 + + + + + + +
  }
+ +49 + + + + + + +
+ +50 + + + + + + +
  public int readInteger() throws IOException {
+ +51 + + +1 + +1. readInteger : replaced int return with 0 for com/yubico/internal/util/ByteInputStream::readInteger → NO_COVERAGE
+ +
+
+
    return readInt();
+ +52 + + + + + + +
  }
+ +53 + + + + + + +
+ +54 + + + + + + +
  public byte readSigned() throws IOException {
+ +55 + + +1 + +1. readSigned : replaced byte return with 0 for com/yubico/internal/util/ByteInputStream::readSigned → NO_COVERAGE
+ +
+
+
    return readByte();
+ +56 + + + + + + +
  }
+ +57 + + + + + + +
+ +58 + + + + + + +
  public int readUnsigned() throws IOException {
+ +59 + + +1 + +1. readUnsigned : replaced int return with 0 for com/yubico/internal/util/ByteInputStream::readUnsigned → NO_COVERAGE
+ +
+
+
    return readUnsignedByte();
+ +60 + + + + + + +
  }
+ +61 + + + + + + +
}

Mutations

40 + + + +

1.1
Location : read
Killed by : none
removed call to com/yubico/internal/util/ByteInputStream::readFully → NO_COVERAGE

+
41 + + + +

1.1
Location : read
Killed by : none
replaced return value with null for com/yubico/internal/util/ByteInputStream::read → NO_COVERAGE

+
46 + + + +

1.1
Location : readAll
Killed by : none
removed call to com/yubico/internal/util/ByteInputStream::readFully → NO_COVERAGE

+
47 + + + +

1.1
Location : readAll
Killed by : none
replaced return value with null for com/yubico/internal/util/ByteInputStream::readAll → NO_COVERAGE

+
51 + + + +

1.1
Location : readInteger
Killed by : none
replaced int return with 0 for com/yubico/internal/util/ByteInputStream::readInteger → NO_COVERAGE

+
55 + + + +

1.1
Location : readSigned
Killed by : none
replaced byte return with 0 for com/yubico/internal/util/ByteInputStream::readSigned → NO_COVERAGE

+
59 + + + +

1.1
Location : readUnsigned
Killed by : none
replaced int return with 0 for com/yubico/internal/util/ByteInputStream::readUnsigned → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/CertificateParser.java.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/CertificateParser.java.html new file mode 100644 index 000000000..39ea8cb74 --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/CertificateParser.java.html @@ -0,0 +1,2773 @@ + + + + + + + + + +

CertificateParser.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.internal.util;
+ +26 + + + + + + +
+ +27 + + + + + + +
import java.io.ByteArrayInputStream;
+ +28 + + + + + + +
import java.io.InputStream;
+ +29 + + + + + + +
import java.nio.ByteBuffer;
+ +30 + + + + + + +
import java.security.MessageDigest;
+ +31 + + + + + + +
import java.security.NoSuchAlgorithmException;
+ +32 + + + + + + +
import java.security.cert.Certificate;
+ +33 + + + + + + +
import java.security.cert.CertificateException;
+ +34 + + + + + + +
import java.security.cert.CertificateFactory;
+ +35 + + + + + + +
import java.security.cert.X509Certificate;
+ +36 + + + + + + +
import java.util.Arrays;
+ +37 + + + + + + +
import java.util.Base64;
+ +38 + + + + + + +
import java.util.List;
+ +39 + + + + + + +
import java.util.Optional;
+ +40 + + + + + + +
+ +41 + + + + + + +
public class CertificateParser {
+ +42 + + + + + + +
  public static final String ID_FIDO_GEN_CE_AAGUID = "1.3.6.1.4.1.45724.1.1.4";
+ +43 + + + + + + +
  private static final Base64.Decoder BASE64_DECODER = Base64.getDecoder();
+ +44 + + + + + + +
+ +45 + + + + + + +
  private static final List<String> FIXSIG =
+ +46 + + + + + + +
      Arrays.asList(
+ +47 + + + + + + +
          "CN=Yubico U2F EE Serial 776137165",
+ +48 + + + + + + +
          "CN=Yubico U2F EE Serial 1086591525",
+ +49 + + + + + + +
          "CN=Yubico U2F EE Serial 1973679733",
+ +50 + + + + + + +
          "CN=Yubico U2F EE Serial 13503277888",
+ +51 + + + + + + +
          "CN=Yubico U2F EE Serial 13831167861",
+ +52 + + + + + + +
          "CN=Yubico U2F EE Serial 14803321578");
+ +53 + + + + + + +
+ +54 + + + + + + +
  private static final int UNUSED_BITS_BYTE_INDEX_FROM_END = 257;
+ +55 + + + + + + +
+ +56 + + + + + + +
  public static X509Certificate parsePem(String pemEncodedCert) throws CertificateException {
+ +57 + + +1 + +1. parsePem : replaced return value with null for com/yubico/internal/util/CertificateParser::parsePem → KILLED
+ +
+
+
    return parseDer(
+ +58 + + + + + + +
        pemEncodedCert
+ +59 + + + + + + +
            .replaceAll("-----BEGIN CERTIFICATE-----", "")
+ +60 + + + + + + +
            .replaceAll("-----END CERTIFICATE-----", "")
+ +61 + + + + + + +
            .replaceAll("\n", ""));
+ +62 + + + + + + +
  }
+ +63 + + + + + + +
+ +64 + + + + + + +
  public static X509Certificate parseDer(String base64DerEncodedCert) throws CertificateException {
+ +65 + + +1 + +1. parseDer : replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer → KILLED
+ +
+
+
    return parseDer(BASE64_DECODER.decode(base64DerEncodedCert));
+ +66 + + + + + + +
  }
+ +67 + + + + + + +
+ +68 + + + + + + +
  public static X509Certificate parseDer(byte[] derEncodedCert) throws CertificateException {
+ +69 + + +1 + +1. parseDer : replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer → KILLED
+ +
+
+
    return parseDer(new ByteArrayInputStream(derEncodedCert));
+ +70 + + + + + + +
  }
+ +71 + + + + + + +
+ +72 + + + + + + +
  public static X509Certificate parseDer(InputStream is) throws CertificateException {
+ +73 + + + + + + +
    X509Certificate cert =
+ +74 + + + + + + +
        (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(is);
+ +75 + + + + + + +
    // Some known certs have an incorrect "unused bits" value, which causes problems on newer
+ +76 + + + + + + +
    // versions of BouncyCastle.
+ +77 + + +1 + +1. parseDer : negated conditional → SURVIVED
+ +
+
+
    if (FIXSIG.contains(cert.getSubjectX500Principal().getName())) {
+ +78 + + + + + + +
      byte[] encoded = cert.getEncoded();
+ +79 + + + + + + +
+ +80 + + +2 + +1. parseDer : changed conditional boundary → SURVIVED
+2. parseDer : negated conditional → KILLED
+ +
+
+
      if (encoded.length >= UNUSED_BITS_BYTE_INDEX_FROM_END) {
+ +81 + + +1 + +1. parseDer : Replaced integer subtraction with addition → KILLED
+ +
+
+
        encoded[encoded.length - UNUSED_BITS_BYTE_INDEX_FROM_END] =
+ +82 + + + + + + +
            0; // Fix the "unused bits" field (should always be 0).
+ +83 + + + + + + +
      } else {
+ +84 + + + + + + +
        throw new IllegalArgumentException(
+ +85 + + + + + + +
            String.format(
+ +86 + + + + + + +
                "Expected DER encoded cert to be at least %d bytes, was %d: %s",
+ +87 + + + + + + +
                UNUSED_BITS_BYTE_INDEX_FROM_END, encoded.length, cert));
+ +88 + + + + + + +
      }
+ +89 + + + + + + +
+ +90 + + + + + + +
      cert =
+ +91 + + + + + + +
          (X509Certificate)
+ +92 + + + + + + +
              CertificateFactory.getInstance("X.509")
+ +93 + + + + + + +
                  .generateCertificate(new ByteArrayInputStream(encoded));
+ +94 + + + + + + +
    }
+ +95 + + +1 + +1. parseDer : replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer → KILLED
+ +
+
+
    return cert;
+ +96 + + + + + + +
  }
+ +97 + + + + + + +
+ +98 + + + + + + +
  /**
+ +99 + + + + + + +
   * Compute a Subject Key Identifier as defined as method (1) in RFC 5280 section 4.2.1.2.
+ +100 + + + + + + +
   *
+ +101 + + + + + + +
   * @throws NoSuchAlgorithmException if the SHA-1 hash algorithm is not available.
+ +102 + + + + + + +
   * @see <a href="https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.2">Internet X.509
+ +103 + + + + + + +
   *     Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile,
+ +104 + + + + + + +
   *     section 4.2.1.2. Subject Key Identifier</a>
+ +105 + + + + + + +
   */
+ +106 + + + + + + +
  public static byte[] computeSubjectKeyIdentifier(final Certificate cert)
+ +107 + + + + + + +
      throws NoSuchAlgorithmException {
+ +108 + + + + + + +
    final byte[] spki = cert.getPublicKey().getEncoded();
+ +109 + + + + + + +
+ +110 + + + + + + +
    // SubjectPublicKeyInfo  ::=  SEQUENCE  {
+ +111 + + + + + + +
    //     algorithm            AlgorithmIdentifier,
+ +112 + + + + + + +
    //     subjectPublicKey     BIT STRING  }
+ +113 + + + + + + +
    final byte algLength = spki[2 + 1];
+ +114 + + + + + + +
+ +115 + + + + + + +
    // BIT STRING begins with one octet specifying number of unused bits at end;
+ +116 + + + + + + +
    // this is not included in the content to hash for a Subject Key Identifier.
+ +117 + + +2 + +1. computeSubjectKeyIdentifier : Replaced integer addition with subtraction → KILLED
+2. computeSubjectKeyIdentifier : Replaced integer addition with subtraction → KILLED
+ +
+
+
    final int spkBitsStart = 2 + 2 + 2 + algLength + 1;
+ +118 + + + + + + +
+ +119 + + +1 + +1. computeSubjectKeyIdentifier : replaced return value with null for com/yubico/internal/util/CertificateParser::computeSubjectKeyIdentifier → KILLED
+ +
+
+
    return MessageDigest.getInstance("SHA-1")
+ +120 + + + + + + +
        .digest(Arrays.copyOfRange(spki, spkBitsStart, spki.length));
+ +121 + + + + + + +
  }
+ +122 + + + + + + +
+ +123 + + + + + + +
  /**
+ +124 + + + + + + +
   * Parses an AAGUID into bytes. Refer to <a
+ +125 + + + + + + +
   * href="https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#sctn-packed-attestation-cert-requirements">Packed
+ +126 + + + + + + +
   * Attestation Statement Certificate Requirements</a> on the W3C web site for details of the ASN.1
+ +127 + + + + + + +
   * structure that this method parses.
+ +128 + + + + + + +
   *
+ +129 + + + + + + +
   * @param bytes the bytes making up value of the extension
+ +130 + + + + + + +
   * @return the bytes of the AAGUID
+ +131 + + + + + + +
   */
+ +132 + + + + + + +
  private static byte[] parseAaguid(byte[] bytes) {
+ +133 + + + + + + +
+ +134 + + +2 + +1. parseAaguid : negated conditional → NO_COVERAGE
+2. parseAaguid : negated conditional → NO_COVERAGE
+ +
+
+
    if (bytes != null && bytes.length == 20) {
+ +135 + + + + + + +
      ByteBuffer buffer = ByteBuffer.wrap(bytes);
+ +136 + + + + + + +
+ +137 + + +1 + +1. parseAaguid : negated conditional → NO_COVERAGE
+ +
+
+
      if (buffer.get() == (byte) 0x04
+ +138 + + +1 + +1. parseAaguid : negated conditional → NO_COVERAGE
+ +
+
+
          && buffer.get() == (byte) 0x12
+ +139 + + +1 + +1. parseAaguid : negated conditional → NO_COVERAGE
+ +
+
+
          && buffer.get() == (byte) 0x04
+ +140 + + +1 + +1. parseAaguid : negated conditional → NO_COVERAGE
+ +
+
+
          && buffer.get() == (byte) 0x10) {
+ +141 + + + + + + +
        byte[] aaguidBytes = new byte[16];
+ +142 + + + + + + +
        buffer.get(aaguidBytes);
+ +143 + + + + + + +
+ +144 + + +1 + +1. parseAaguid : replaced return value with null for com/yubico/internal/util/CertificateParser::parseAaguid → NO_COVERAGE
+ +
+
+
        return aaguidBytes;
+ +145 + + + + + + +
      }
+ +146 + + + + + + +
    }
+ +147 + + + + + + +
+ +148 + + + + + + +
    throw new IllegalArgumentException(
+ +149 + + + + + + +
        "X.509 extension 1.3.6.1.4.1.45724.1.1.4 (id-fido-gen-ce-aaguid) is not valid.");
+ +150 + + + + + + +
  }
+ +151 + + + + + + +
+ +152 + + + + + + +
  public static Optional<byte[]> parseFidoAaguidExtension(X509Certificate cert) {
+ +153 + + + + + + +
    Optional<byte[]> result =
+ +154 + + + + + + +
        Optional.ofNullable(cert.getExtensionValue(ID_FIDO_GEN_CE_AAGUID))
+ +155 + + + + + + +
            .map(CertificateParser::parseAaguid);
+ +156 + + +1 + +1. parseFidoAaguidExtension : removed call to java/util/Optional::ifPresent → NO_COVERAGE
+ +
+
+
    result.ifPresent(
+ +157 + + + + + + +
        aaguid -> {
+ +158 + + +1 + +1. lambda$parseFidoAaguidExtension$0 : negated conditional → NO_COVERAGE
+ +
+
+
          if (cert.getCriticalExtensionOIDs().contains(ID_FIDO_GEN_CE_AAGUID)) {
+ +159 + + + + + + +
            throw new IllegalArgumentException(
+ +160 + + + + + + +
                String.format(
+ +161 + + + + + + +
                    "X.509 extension %s (id-fido-gen-ce-aaguid) must not be marked critical.",
+ +162 + + + + + + +
                    ID_FIDO_GEN_CE_AAGUID));
+ +163 + + + + + + +
          }
+ +164 + + + + + + +
        });
+ +165 + + +1 + +1. parseFidoAaguidExtension : replaced return value with Optional.empty for com/yubico/internal/util/CertificateParser::parseFidoAaguidExtension → NO_COVERAGE
+ +
+
+
    return result;
+ +166 + + + + + + +
  }
+ +167 + + + + + + +
}

Mutations

57 + + + +

1.1
Location : parsePem
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
replaced return value with null for com/yubico/internal/util/CertificateParser::parsePem → KILLED

+
65 + + + +

1.1
Location : parseDer
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer → KILLED

+
69 + + + +

1.1
Location : parseDer
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer → KILLED

+
77 + + + +

1.1
Location : parseDer
Killed by : none
negated conditional → SURVIVED

+
80 + + + +

1.1
Location : parseDer
Killed by : com.yubico.internal.util.CertificateParserTest.parsePemDoesNotReturnNull(com.yubico.internal.util.CertificateParserTest)
negated conditional → KILLED

2.2
Location : parseDer
Killed by : none
changed conditional boundary → SURVIVED

+
81 + + + +

1.1
Location : parseDer
Killed by : com.yubico.internal.util.CertificateParserTest.parsePemDoesNotReturnNull(com.yubico.internal.util.CertificateParserTest)
Replaced integer subtraction with addition → KILLED

+
95 + + + +

1.1
Location : parseDer
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer → KILLED

+
117 + + + +

1.1
Location : computeSubjectKeyIdentifier
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
Replaced integer addition with subtraction → KILLED

2.2
Location : computeSubjectKeyIdentifier
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
Replaced integer addition with subtraction → KILLED

+
119 + + + +

1.1
Location : computeSubjectKeyIdentifier
Killed by : com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)
replaced return value with null for com/yubico/internal/util/CertificateParser::computeSubjectKeyIdentifier → KILLED

+
134 + + + +

1.1
Location : parseAaguid
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : parseAaguid
Killed by : none
negated conditional → NO_COVERAGE

+
137 + + + +

1.1
Location : parseAaguid
Killed by : none
negated conditional → NO_COVERAGE

+
138 + + + +

1.1
Location : parseAaguid
Killed by : none
negated conditional → NO_COVERAGE

+
139 + + + +

1.1
Location : parseAaguid
Killed by : none
negated conditional → NO_COVERAGE

+
140 + + + +

1.1
Location : parseAaguid
Killed by : none
negated conditional → NO_COVERAGE

+
144 + + + +

1.1
Location : parseAaguid
Killed by : none
replaced return value with null for com/yubico/internal/util/CertificateParser::parseAaguid → NO_COVERAGE

+
156 + + + +

1.1
Location : parseFidoAaguidExtension
Killed by : none
removed call to java/util/Optional::ifPresent → NO_COVERAGE

+
158 + + + +

1.1
Location : lambda$parseFidoAaguidExtension$0
Killed by : none
negated conditional → NO_COVERAGE

+
165 + + + +

1.1
Location : parseFidoAaguidExtension
Killed by : none
replaced return value with Optional.empty for com/yubico/internal/util/CertificateParser::parseFidoAaguidExtension → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/CollectionUtil.java.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/CollectionUtil.java.html new file mode 100644 index 000000000..d8775c691 --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/CollectionUtil.java.html @@ -0,0 +1,1053 @@ + + + + + + + + + +

CollectionUtil.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.internal.util;
+ +2 + + + + + + +
+ +3 + + + + + + +
import java.util.ArrayList;
+ +4 + + + + + + +
import java.util.Collections;
+ +5 + + + + + + +
import java.util.HashMap;
+ +6 + + + + + + +
import java.util.HashSet;
+ +7 + + + + + + +
import java.util.List;
+ +8 + + + + + + +
import java.util.Map;
+ +9 + + + + + + +
import java.util.Set;
+ +10 + + + + + + +
import java.util.SortedSet;
+ +11 + + + + + + +
import java.util.TreeSet;
+ +12 + + + + + + +
+ +13 + + + + + + +
public class CollectionUtil {
+ +14 + + + + + + +
+ +15 + + + + + + +
  /**
+ +16 + + + + + + +
   * Make an unmodifiable shallow copy of the argument.
+ +17 + + + + + + +
   *
+ +18 + + + + + + +
   * @return A shallow copy of <code>m</code> which cannot be modified
+ +19 + + + + + + +
   */
+ +20 + + + + + + +
  public static <K, V> Map<K, V> immutableMap(Map<K, V> m) {
+ +21 + + +1 + +1. immutableMap : replaced return value with Collections.emptyMap for com/yubico/internal/util/CollectionUtil::immutableMap → KILLED
+ +
+
+
    return Collections.unmodifiableMap(new HashMap<>(m));
+ +22 + + + + + + +
  }
+ +23 + + + + + + +
+ +24 + + + + + + +
  /**
+ +25 + + + + + + +
   * Make an unmodifiable shallow copy of the argument.
+ +26 + + + + + + +
   *
+ +27 + + + + + + +
   * @return A shallow copy of <code>l</code> which cannot be modified
+ +28 + + + + + + +
   */
+ +29 + + + + + + +
  public static <T> List<T> immutableList(List<T> l) {
+ +30 + + +1 + +1. immutableList : replaced return value with Collections.emptyList for com/yubico/internal/util/CollectionUtil::immutableList → KILLED
+ +
+
+
    return Collections.unmodifiableList(new ArrayList<>(l));
+ +31 + + + + + + +
  }
+ +32 + + + + + + +
+ +33 + + + + + + +
  /**
+ +34 + + + + + + +
   * Alias of <code>s == null ? Collections.emptyList() : CollectionUtil.immutableList(s)</code>.
+ +35 + + + + + + +
   */
+ +36 + + + + + + +
  public static <T> List<T> immutableListOrEmpty(List<T> l) {
+ +37 + + +2 + +1. immutableListOrEmpty : negated conditional → NO_COVERAGE
+2. immutableListOrEmpty : replaced return value with Collections.emptyList for com/yubico/internal/util/CollectionUtil::immutableListOrEmpty → NO_COVERAGE
+ +
+
+
    return l == null ? Collections.emptyList() : immutableList(l);
+ +38 + + + + + + +
  }
+ +39 + + + + + + +
+ +40 + + + + + + +
  /**
+ +41 + + + + + + +
   * Make an unmodifiable shallow copy of the argument.
+ +42 + + + + + + +
   *
+ +43 + + + + + + +
   * @return A shallow copy of <code>s</code> which cannot be modified
+ +44 + + + + + + +
   */
+ +45 + + + + + + +
  public static <T> Set<T> immutableSet(Set<T> s) {
+ +46 + + +1 + +1. immutableSet : replaced return value with Collections.emptySet for com/yubico/internal/util/CollectionUtil::immutableSet → KILLED
+ +
+
+
    return Collections.unmodifiableSet(new HashSet<>(s));
+ +47 + + + + + + +
  }
+ +48 + + + + + + +
+ +49 + + + + + + +
  /** Alias of <code>s == null ? Collections.emptySet() : CollectionUtil.immutableSet(s)</code>. */
+ +50 + + + + + + +
  public static <T> Set<T> immutableSetOrEmpty(Set<T> s) {
+ +51 + + +2 + +1. immutableSetOrEmpty : replaced return value with Collections.emptySet for com/yubico/internal/util/CollectionUtil::immutableSetOrEmpty → NO_COVERAGE
+2. immutableSetOrEmpty : negated conditional → NO_COVERAGE
+ +
+
+
    return s == null ? Collections.emptySet() : immutableSet(s);
+ +52 + + + + + + +
  }
+ +53 + + + + + + +
+ +54 + + + + + + +
  /**
+ +55 + + + + + + +
   * Make an unmodifiable shallow copy of the argument.
+ +56 + + + + + + +
   *
+ +57 + + + + + + +
   * @return A shallow copy of <code>s</code> which cannot be modified
+ +58 + + + + + + +
   */
+ +59 + + + + + + +
  public static <T> SortedSet<T> immutableSortedSet(Set<T> s) {
+ +60 + + +1 + +1. immutableSortedSet : replaced return value with null for com/yubico/internal/util/CollectionUtil::immutableSortedSet → KILLED
+ +
+
+
    return Collections.unmodifiableSortedSet(new TreeSet<>(s));
+ +61 + + + + + + +
  }
+ +62 + + + + + + +
}

Mutations

21 + + + +

1.1
Location : immutableMap
Killed by : com.yubico.internal.util.CollectionUtilSpec
replaced return value with Collections.emptyMap for com/yubico/internal/util/CollectionUtil::immutableMap → KILLED

+
30 + + + +

1.1
Location : immutableList
Killed by : com.yubico.internal.util.CollectionUtilSpec
replaced return value with Collections.emptyList for com/yubico/internal/util/CollectionUtil::immutableList → KILLED

+
37 + + + +

1.1
Location : immutableListOrEmpty
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : immutableListOrEmpty
Killed by : none
replaced return value with Collections.emptyList for com/yubico/internal/util/CollectionUtil::immutableListOrEmpty → NO_COVERAGE

+
46 + + + +

1.1
Location : immutableSet
Killed by : com.yubico.internal.util.CollectionUtilSpec
replaced return value with Collections.emptySet for com/yubico/internal/util/CollectionUtil::immutableSet → KILLED

+
51 + + + +

1.1
Location : immutableSetOrEmpty
Killed by : none
replaced return value with Collections.emptySet for com/yubico/internal/util/CollectionUtil::immutableSetOrEmpty → NO_COVERAGE

2.2
Location : immutableSetOrEmpty
Killed by : none
negated conditional → NO_COVERAGE

+
60 + + + +

1.1
Location : immutableSortedSet
Killed by : com.yubico.internal.util.CollectionUtilSpec
replaced return value with null for com/yubico/internal/util/CollectionUtil::immutableSortedSet → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/ComparableUtil.java.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/ComparableUtil.java.html new file mode 100644 index 000000000..ee2d06e60 --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/ComparableUtil.java.html @@ -0,0 +1,999 @@ + + + + + + + + + +

ComparableUtil.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.internal.util;
+ +26 + + + + + + +
+ +27 + + + + + + +
import java.util.Iterator;
+ +28 + + + + + + +
import java.util.SortedSet;
+ +29 + + + + + + +
+ +30 + + + + + + +
public class ComparableUtil {
+ +31 + + + + + + +
+ +32 + + + + + + +
  public static <T extends Comparable<T>> int compareComparableSets(
+ +33 + + + + + + +
      SortedSet<T> a, SortedSet<T> b) {
+ +34 + + +1 + +1. compareComparableSets : negated conditional → KILLED
+ +
+
+
    if (a.size() == b.size()) {
+ +35 + + + + + + +
      final Iterator<T> as = a.iterator();
+ +36 + + + + + + +
      final Iterator<T> bs = b.iterator();
+ +37 + + + + + + +
+ +38 + + +2 + +1. compareComparableSets : negated conditional → SURVIVED
+2. compareComparableSets : negated conditional → KILLED
+ +
+
+
      while (as.hasNext() && bs.hasNext()) {
+ +39 + + + + + + +
        final int comp = as.next().compareTo(bs.next());
+ +40 + + +1 + +1. compareComparableSets : negated conditional → KILLED
+ +
+
+
        if (comp != 0) {
+ +41 + + +1 + +1. compareComparableSets : replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets → KILLED
+ +
+
+
          return comp;
+ +42 + + + + + + +
        }
+ +43 + + + + + + +
      }
+ +44 + + + + + + +
+ +45 + + +1 + +1. compareComparableSets : negated conditional → KILLED
+ +
+
+
      if (as.hasNext()) {
+ +46 + + +1 + +1. compareComparableSets : replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets → NO_COVERAGE
+ +
+
+
        return 1;
+ +47 + + +1 + +1. compareComparableSets : negated conditional → KILLED
+ +
+
+
      } else if (bs.hasNext()) {
+ +48 + + +1 + +1. compareComparableSets : replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets → NO_COVERAGE
+ +
+
+
        return -1;
+ +49 + + + + + + +
      } else {
+ +50 + + + + + + +
        return 0;
+ +51 + + + + + + +
      }
+ +52 + + + + + + +
    } else {
+ +53 + + +2 + +1. compareComparableSets : replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets → KILLED
+2. compareComparableSets : Replaced integer subtraction with addition → KILLED
+ +
+
+
      return a.size() - b.size();
+ +54 + + + + + + +
    }
+ +55 + + + + + + +
  }
+ +56 + + + + + + +
}

Mutations

34 + + + +

1.1
Location : compareComparableSets
Killed by : com.yubico.internal.util.ComparableUtilSpec
negated conditional → KILLED

+
38 + + + +

1.1
Location : compareComparableSets
Killed by : com.yubico.internal.util.ComparableUtilSpec
negated conditional → KILLED

2.2
Location : compareComparableSets
Killed by : none
negated conditional → SURVIVED

+
40 + + + +

1.1
Location : compareComparableSets
Killed by : com.yubico.internal.util.ComparableUtilSpec
negated conditional → KILLED

+
41 + + + +

1.1
Location : compareComparableSets
Killed by : com.yubico.internal.util.ComparableUtilSpec
replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets → KILLED

+
45 + + + +

1.1
Location : compareComparableSets
Killed by : com.yubico.internal.util.ComparableUtilSpec
negated conditional → KILLED

+
46 + + + +

1.1
Location : compareComparableSets
Killed by : none
replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets → NO_COVERAGE

+
47 + + + +

1.1
Location : compareComparableSets
Killed by : com.yubico.internal.util.ComparableUtilSpec
negated conditional → KILLED

+
48 + + + +

1.1
Location : compareComparableSets
Killed by : none
replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets → NO_COVERAGE

+
53 + + + +

1.1
Location : compareComparableSets
Killed by : com.yubico.internal.util.ComparableUtilSpec
replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets → KILLED

2.2
Location : compareComparableSets
Killed by : com.yubico.internal.util.ComparableUtilSpec
Replaced integer subtraction with addition → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/ExceptionUtil.java.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/ExceptionUtil.java.html new file mode 100644 index 000000000..f71f336cd --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/ExceptionUtil.java.html @@ -0,0 +1,748 @@ + + + + + + + + + +

ExceptionUtil.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.internal.util;
+ +26 + + + + + + +
+ +27 + + + + + + +
import lombok.experimental.UtilityClass;
+ +28 + + + + + + +
import org.slf4j.Logger;
+ +29 + + + + + + +
+ +30 + + + + + + +
@UtilityClass
+ +31 + + + + + + +
public class ExceptionUtil {
+ +32 + + + + + + +
+ +33 + + + + + + +
  public static RuntimeException wrapAndLog(Logger log, String message, Throwable t) {
+ +34 + + + + + + +
    RuntimeException err = new RuntimeException(message, t);
+ +35 + + + + + + +
    log.error(err.getMessage(), err);
+ +36 + + +1 + +1. wrapAndLog : replaced return value with null for com/yubico/internal/util/ExceptionUtil::wrapAndLog → NO_COVERAGE
+ +
+
+
    return err;
+ +37 + + + + + + +
  }
+ +38 + + + + + + +
+ +39 + + + + + + +
  public static void assertTrue(
+ +40 + + + + + + +
      boolean condition, String failureMessageTemplate, Object... failureMessageArgs) {
+ +41 + + +1 + +1. assertTrue : negated conditional → KILLED
+ +
+
+
    if (!condition) {
+ +42 + + + + + + +
      throw new IllegalArgumentException(String.format(failureMessageTemplate, failureMessageArgs));
+ +43 + + + + + + +
    }
+ +44 + + + + + + +
  }
+ +45 + + + + + + +
}

Mutations

36 + + + +

1.1
Location : wrapAndLog
Killed by : none
replaced return value with null for com/yubico/internal/util/ExceptionUtil::wrapAndLog → NO_COVERAGE

+
41 + + + +

1.1
Location : assertTrue
Killed by : com.yubico.internal.util.BinaryUtilSpec
negated conditional → KILLED

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/JacksonCodecs.java.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/JacksonCodecs.java.html new file mode 100644 index 000000000..74414cb90 --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/JacksonCodecs.java.html @@ -0,0 +1,726 @@ + + + + + + + + + +

JacksonCodecs.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.internal.util;
+ +2 + + + + + + +
+ +3 + + + + + + +
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+ +4 + + + + + + +
import com.fasterxml.jackson.core.Base64Variants;
+ +5 + + + + + + +
import com.fasterxml.jackson.databind.DeserializationFeature;
+ +6 + + + + + + +
import com.fasterxml.jackson.databind.ObjectMapper;
+ +7 + + + + + + +
import com.fasterxml.jackson.databind.json.JsonMapper;
+ +8 + + + + + + +
import com.fasterxml.jackson.databind.node.ObjectNode;
+ +9 + + + + + + +
import com.fasterxml.jackson.dataformat.cbor.CBORFactory;
+ +10 + + + + + + +
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+ +11 + + + + + + +
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+ +12 + + + + + + +
import com.upokecenter.cbor.CBORObject;
+ +13 + + + + + + +
import java.io.IOException;
+ +14 + + + + + + +
+ +15 + + + + + + +
public class JacksonCodecs {
+ +16 + + + + + + +
+ +17 + + + + + + +
  public static ObjectMapper cbor() {
+ +18 + + +1 + +1. cbor : replaced return value with null for com/yubico/internal/util/JacksonCodecs::cbor → NO_COVERAGE
+ +
+
+
    return new ObjectMapper(new CBORFactory()).setBase64Variant(Base64Variants.MODIFIED_FOR_URL);
+ +19 + + + + + + +
  }
+ +20 + + + + + + +
+ +21 + + + + + + +
  public static ObjectMapper json() {
+ +22 + + +1 + +1. json : replaced return value with null for com/yubico/internal/util/JacksonCodecs::json → NO_COVERAGE
+ +
+
+
    return JsonMapper.builder()
+ +23 + + + + + + +
        .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
+ +24 + + + + + + +
        .serializationInclusion(Include.NON_ABSENT)
+ +25 + + + + + + +
        .defaultBase64Variant(Base64Variants.MODIFIED_FOR_URL)
+ +26 + + + + + + +
        .addModule(new Jdk8Module())
+ +27 + + + + + + +
        .addModule(new JavaTimeModule())
+ +28 + + + + + + +
        .build();
+ +29 + + + + + + +
  }
+ +30 + + + + + + +
+ +31 + + + + + + +
  public static CBORObject deepCopy(CBORObject a) {
+ +32 + + +1 + +1. deepCopy : replaced return value with null for com/yubico/internal/util/JacksonCodecs::deepCopy → NO_COVERAGE
+ +
+
+
    return CBORObject.DecodeFromBytes(a.EncodeToBytes());
+ +33 + + + + + + +
  }
+ +34 + + + + + + +
+ +35 + + + + + + +
  public static ObjectNode deepCopy(ObjectNode a) {
+ +36 + + + + + + +
    try {
+ +37 + + +1 + +1. deepCopy : replaced return value with null for com/yubico/internal/util/JacksonCodecs::deepCopy → NO_COVERAGE
+ +
+
+
      return (ObjectNode) json().readTree(json().writeValueAsString(a));
+ +38 + + + + + + +
    } catch (IOException e) {
+ +39 + + + + + + +
      throw new RuntimeException(e);
+ +40 + + + + + + +
    }
+ +41 + + + + + + +
  }
+ +42 + + + + + + +
}

Mutations

18 + + + +

1.1
Location : cbor
Killed by : none
replaced return value with null for com/yubico/internal/util/JacksonCodecs::cbor → NO_COVERAGE

+
22 + + + +

1.1
Location : json
Killed by : none
replaced return value with null for com/yubico/internal/util/JacksonCodecs::json → NO_COVERAGE

+
32 + + + +

1.1
Location : deepCopy
Killed by : none
replaced return value with null for com/yubico/internal/util/JacksonCodecs::deepCopy → NO_COVERAGE

+
37 + + + +

1.1
Location : deepCopy
Killed by : none
replaced return value with null for com/yubico/internal/util/JacksonCodecs::deepCopy → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/OptionalUtil.java.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/OptionalUtil.java.html new file mode 100644 index 000000000..9d56df8cb --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/OptionalUtil.java.html @@ -0,0 +1,1180 @@ + + + + + + + + + +

OptionalUtil.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
package com.yubico.internal.util;
+ +2 + + + + + + +
+ +3 + + + + + + +
import java.util.Optional;
+ +4 + + + + + + +
import java.util.function.BinaryOperator;
+ +5 + + + + + + +
import java.util.function.Supplier;
+ +6 + + + + + + +
import java.util.stream.Stream;
+ +7 + + + + + + +
import lombok.NonNull;
+ +8 + + + + + + +
import lombok.experimental.UtilityClass;
+ +9 + + + + + + +
+ +10 + + + + + + +
/** Utilities for working with {@link Optional} values. */
+ +11 + + + + + + +
@UtilityClass
+ +12 + + + + + + +
public class OptionalUtil {
+ +13 + + + + + + +
+ +14 + + + + + + +
  /**
+ +15 + + + + + + +
   * If <code>primary</code> is present, return it unchanged. Otherwise return <code>
+ +16 + + + + + + +
   * secondary</code>.
+ +17 + + + + + + +
   */
+ +18 + + + + + + +
  public static <T> Optional<T> orOptional(Optional<T> primary, Optional<T> secondary) {
+ +19 + + +1 + +1. orOptional : negated conditional → NO_COVERAGE
+ +
+
+
    if (primary.isPresent()) {
+ +20 + + +1 + +1. orOptional : replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orOptional → NO_COVERAGE
+ +
+
+
      return primary;
+ +21 + + + + + + +
    } else {
+ +22 + + +1 + +1. orOptional : replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orOptional → NO_COVERAGE
+ +
+
+
      return secondary;
+ +23 + + + + + + +
    }
+ +24 + + + + + + +
  }
+ +25 + + + + + + +
+ +26 + + + + + + +
  /**
+ +27 + + + + + + +
   * If <code>primary</code> is present, return it unchanged. Otherwise return the result of <code>
+ +28 + + + + + + +
   * recover</code>.
+ +29 + + + + + + +
   */
+ +30 + + + + + + +
  public static <T> Optional<T> orElseOptional(Optional<T> primary, Supplier<Optional<T>> recover) {
+ +31 + + +1 + +1. orElseOptional : negated conditional → NO_COVERAGE
+ +
+
+
    if (primary.isPresent()) {
+ +32 + + +1 + +1. orElseOptional : replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orElseOptional → NO_COVERAGE
+ +
+
+
      return primary;
+ +33 + + + + + + +
    } else {
+ +34 + + +1 + +1. orElseOptional : replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orElseOptional → NO_COVERAGE
+ +
+
+
      return recover.get();
+ +35 + + + + + + +
    }
+ +36 + + + + + + +
  }
+ +37 + + + + + + +
+ +38 + + + + + + +
  /**
+ +39 + + + + + + +
   * Returns a sequential {@link Stream} with this {@link Optional} as its source.
+ +40 + + + + + + +
   *
+ +41 + + + + + + +
   * @param o the {@link Optional} to interpret as a {@link Stream}
+ +42 + + + + + + +
   * @return a sequential {@link Stream} containing the value of this {@link Optional} if present,
+ +43 + + + + + + +
   *     otherwise an empty {@link Stream}.
+ +44 + + + + + + +
   */
+ +45 + + +1 + +1. stream : negated conditional → NO_COVERAGE
+ +
+
+
  public static <T> Stream<T> stream(@NonNull Optional<T> o) {
+ +46 + + +1 + +1. stream : replaced return value with Stream.empty for com/yubico/internal/util/OptionalUtil::stream → NO_COVERAGE
+ +
+
+
    return o.map(Stream::of).orElseGet(Stream::empty);
+ +47 + + + + + + +
  }
+ +48 + + + + + + +
+ +49 + + + + + + +
  /**
+ +50 + + + + + + +
   * If both <code>a</code> and <code>b</code> are present, return <code>f(a, b)</code>.
+ +51 + + + + + + +
   *
+ +52 + + + + + + +
   * <p>If only <code>a</code> is present, return <code>a</code>.
+ +53 + + + + + + +
   *
+ +54 + + + + + + +
   * <p>Otherwise, return <code>b</code>.
+ +55 + + + + + + +
   */
+ +56 + + + + + + +
  public static <T> Optional<T> zipWith(Optional<T> a, Optional<T> b, BinaryOperator<T> f) {
+ +57 + + +2 + +1. zipWith : negated conditional → NO_COVERAGE
+2. zipWith : negated conditional → NO_COVERAGE
+ +
+
+
    if (a.isPresent() && b.isPresent()) {
+ +58 + + +1 + +1. zipWith : replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith → NO_COVERAGE
+ +
+
+
      return Optional.of(f.apply(a.get(), b.get()));
+ +59 + + +1 + +1. zipWith : negated conditional → NO_COVERAGE
+ +
+
+
    } else if (a.isPresent()) {
+ +60 + + +1 + +1. zipWith : replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith → NO_COVERAGE
+ +
+
+
      return a;
+ +61 + + + + + + +
    } else {
+ +62 + + +1 + +1. zipWith : replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith → NO_COVERAGE
+ +
+
+
      return b;
+ +63 + + + + + + +
    }
+ +64 + + + + + + +
  }
+ +65 + + + + + + +
}

Mutations

19 + + + +

1.1
Location : orOptional
Killed by : none
negated conditional → NO_COVERAGE

+
20 + + + +

1.1
Location : orOptional
Killed by : none
replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orOptional → NO_COVERAGE

+
22 + + + +

1.1
Location : orOptional
Killed by : none
replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orOptional → NO_COVERAGE

+
31 + + + +

1.1
Location : orElseOptional
Killed by : none
negated conditional → NO_COVERAGE

+
32 + + + +

1.1
Location : orElseOptional
Killed by : none
replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orElseOptional → NO_COVERAGE

+
34 + + + +

1.1
Location : orElseOptional
Killed by : none
replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orElseOptional → NO_COVERAGE

+
45 + + + +

1.1
Location : stream
Killed by : none
negated conditional → NO_COVERAGE

+
46 + + + +

1.1
Location : stream
Killed by : none
replaced return value with Stream.empty for com/yubico/internal/util/OptionalUtil::stream → NO_COVERAGE

+
57 + + + +

1.1
Location : zipWith
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : zipWith
Killed by : none
negated conditional → NO_COVERAGE

+
58 + + + +

1.1
Location : zipWith
Killed by : none
replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith → NO_COVERAGE

+
59 + + + +

1.1
Location : zipWith
Killed by : none
negated conditional → NO_COVERAGE

+
60 + + + +

1.1
Location : zipWith
Killed by : none
replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith → NO_COVERAGE

+
62 + + + +

1.1
Location : zipWith
Killed by : none
replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/StreamUtil.java.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/StreamUtil.java.html new file mode 100644 index 000000000..9ffe2c9b6 --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/StreamUtil.java.html @@ -0,0 +1,759 @@ + + + + + + + + + +

StreamUtil.java

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +1 + + + + + + +
// Copyright (c) 2018, Yubico AB
+ +2 + + + + + + +
// All rights reserved.
+ +3 + + + + + + +
//
+ +4 + + + + + + +
// Redistribution and use in source and binary forms, with or without
+ +5 + + + + + + +
// modification, are permitted provided that the following conditions are met:
+ +6 + + + + + + +
//
+ +7 + + + + + + +
// 1. Redistributions of source code must retain the above copyright notice, this
+ +8 + + + + + + +
//    list of conditions and the following disclaimer.
+ +9 + + + + + + +
//
+ +10 + + + + + + +
// 2. Redistributions in binary form must reproduce the above copyright notice,
+ +11 + + + + + + +
//    this list of conditions and the following disclaimer in the documentation
+ +12 + + + + + + +
//    and/or other materials provided with the distribution.
+ +13 + + + + + + +
//
+ +14 + + + + + + +
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ +15 + + + + + + +
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ +16 + + + + + + +
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ +17 + + + + + + +
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ +18 + + + + + + +
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ +19 + + + + + + +
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ +20 + + + + + + +
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ +21 + + + + + + +
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ +22 + + + + + + +
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ +23 + + + + + + +
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ +24 + + + + + + +
+ +25 + + + + + + +
package com.yubico.internal.util;
+ +26 + + + + + + +
+ +27 + + + + + + +
import java.util.Iterator;
+ +28 + + + + + + +
import java.util.Set;
+ +29 + + + + + + +
import java.util.stream.Collectors;
+ +30 + + + + + + +
import java.util.stream.Stream;
+ +31 + + + + + + +
import java.util.stream.StreamSupport;
+ +32 + + + + + + +
import lombok.experimental.UtilityClass;
+ +33 + + + + + + +
+ +34 + + + + + + +
@UtilityClass
+ +35 + + + + + + +
public class StreamUtil {
+ +36 + + + + + + +
+ +37 + + + + + + +
  public static <T> Stream<T> toStream(Iterator<T> it) {
+ +38 + + +1 + +1. lambda$toStream$0 : replaced return value with null for com/yubico/internal/util/StreamUtil::lambda$toStream$0 → NO_COVERAGE
+ +
+
+
    Iterable<T> iterable = () -> it;
+ +39 + + +1 + +1. toStream : replaced return value with Stream.empty for com/yubico/internal/util/StreamUtil::toStream → NO_COVERAGE
+ +
+
+
    return StreamSupport.stream(iterable.spliterator(), false);
+ +40 + + + + + + +
  }
+ +41 + + + + + + +
+ +42 + + + + + + +
  public static <T> Set<T> toSet(Iterator<T> it) {
+ +43 + + +1 + +1. toSet : replaced return value with Collections.emptySet for com/yubico/internal/util/StreamUtil::toSet → NO_COVERAGE
+ +
+
+
    return CollectionUtil.immutableSet(toStream(it).collect(Collectors.toSet()));
+ +44 + + + + + + +
  }
+ +45 + + + + + + +
}

Mutations

38 + + + +

1.1
Location : lambda$toStream$0
Killed by : none
replaced return value with null for com/yubico/internal/util/StreamUtil::lambda$toStream$0 → NO_COVERAGE

+
39 + + + +

1.1
Location : toStream
Killed by : none
replaced return value with Stream.empty for com/yubico/internal/util/StreamUtil::toStream → NO_COVERAGE

+
43 + + + +

1.1
Location : toSet
Killed by : none
replaced return value with Collections.emptySet for com/yubico/internal/util/StreamUtil::toSet → NO_COVERAGE

+
+ + +

Active mutators

+ + +

Tests examined

+ + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/com.yubico.internal.util/index.html b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/index.html new file mode 100644 index 000000000..faf788004 --- /dev/null +++ b/mutation-coverage-reports/yubico-util/com.yubico.internal.util/index.html @@ -0,0 +1,118 @@ + + + + + + + + +

Pit Test Coverage Report

+

Package Summary

+

com.yubico.internal.util

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
942%
73/174
46%
56/123
93%
56/60
+ + +

Breakdown by Class

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLine CoverageMutation CoverageTest Strength
BinaryUtil.java
54%
30/56
64%
34/53
97%
34/35
ByteInputStream.java
0%
0/11
0%
0/7
100%
0/0
CertificateParser.java
51%
24/47
43%
9/21
82%
9/11
CollectionUtil.java
57%
4/7
50%
4/8
100%
4/4
ComparableUtil.java
80%
12/15
73%
8/11
89%
8/9
ExceptionUtil.java
43%
3/7
50%
1/2
100%
1/1
JacksonCodecs.java
0%
0/13
0%
0/4
100%
0/0
OptionalUtil.java
0%
0/14
0%
0/14
100%
0/0
StreamUtil.java
0%
0/4
0%
0/3
100%
0/0
+
+ + + +
+ +Report generated by PIT 1.15.0 + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/index.html b/mutation-coverage-reports/yubico-util/index.html new file mode 100644 index 000000000..101ffedea --- /dev/null +++ b/mutation-coverage-reports/yubico-util/index.html @@ -0,0 +1,69 @@ + + + + + + + + +

Pit Test Coverage Report

+ +

Project Summary

+ + + + + + + + + + + + + + + + + +
Number of ClassesLine CoverageMutation CoverageTest Strength
942%
73/174
46%
56/123
93%
56/60
+ + +

Breakdown by Package

+ + + + + + + + + + + + + + + + + + + + + +
NameNumber of ClassesLine CoverageMutation CoverageTest Strength
com.yubico.internal.util9
42%
73/174
46%
56/123
93%
56/60
+
+ + + +
+ +Report generated by PIT 1.15.0 + +
+
+ +Enhanced functionality available at arcmutate.com + + + \ No newline at end of file diff --git a/mutation-coverage-reports/yubico-util/mutations.xml b/mutation-coverage-reports/yubico-util/mutations.xml new file mode 100644 index 000000000..2677d8afc --- /dev/null +++ b/mutation-coverage-reports/yubico-util/mutations.xml @@ -0,0 +1,126 @@ + + +BinaryUtil.javacom.yubico.internal.util.BinaryUtilcopy([B)[B36org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71replaced return value with null for com/yubico/internal/util/BinaryUtil::copy +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint16(I)[B131org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator40com.yubico.internal.util.BinaryUtilSpecchanged conditional boundary +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint16(I)[B132org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator255changed conditional boundary +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint16(I)[B131org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.internal.util.BinaryUtilSpecnegated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint16(I)[B132org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator255com.yubico.internal.util.BinaryUtilSpecnegated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint16(I)[B131org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator204com.yubico.internal.util.BinaryUtilSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint16(I)[B132org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator459com.yubico.internal.util.BinaryUtilSpecremoved call to com/yubico/internal/util/ExceptionUtil::assertTrue +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint16(I)[B139org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator7516com.yubico.internal.util.BinaryUtilSpecreplaced return value with null for com/yubico/internal/util/BinaryUtil::encodeUint16 +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint32(J)[B143org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator60changed conditional boundary +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint32(J)[B144org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator285changed conditional boundary +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint32(J)[B143org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator60negated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint32(J)[B144org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator285negated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint32(J)[B143org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator224removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint32(J)[B144org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator489removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +BinaryUtil.javacom.yubico.internal.util.BinaryUtilencodeUint32(J)[B151org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator7816replaced return value with null for com/yubico/internal/util/BinaryUtil::encodeUint32 +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B61org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator4011com.yubico.internal.util.BinaryUtilSpecchanged conditional boundary +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B63org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator5214com.yubico.internal.util.BinaryUtilSpecchanged conditional boundary +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B56org.pitest.mutationtest.engine.gregor.mutators.MathMutator61com.yubico.internal.util.BinaryUtilSpecReplaced integer modulus with multiplication +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B60org.pitest.mutationtest.engine.gregor.mutators.MathMutator289com.yubico.internal.util.BinaryUtilSpecReplaced integer division with multiplication +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B66org.pitest.mutationtest.engine.gregor.mutators.MathMutator7723com.yubico.internal.util.BinaryUtilSpecReplaced integer division with multiplication +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B66org.pitest.mutationtest.engine.gregor.mutators.MathMutator8323com.yubico.internal.util.BinaryUtilSpecReplaced integer addition with subtraction +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B66org.pitest.mutationtest.engine.gregor.mutators.MathMutator8523com.yubico.internal.util.BinaryUtilSpecReplaced integer modulus with multiplication +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B66org.pitest.mutationtest.engine.gregor.mutators.MathMutator8723com.yubico.internal.util.BinaryUtilSpecReplaced integer multiplication with division +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B66org.pitest.mutationtest.engine.gregor.mutators.MathMutator8823com.yubico.internal.util.BinaryUtilSpecReplaced Shift Left with Shift Right +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B66org.pitest.mutationtest.engine.gregor.mutators.MathMutator8923com.yubico.internal.util.BinaryUtilSpecReplaced bitwise OR with AND +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B56org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator71com.yubico.internal.util.BinaryUtilSpecnegated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B61org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4011com.yubico.internal.util.BinaryUtilSpecnegated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B63org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5214com.yubico.internal.util.BinaryUtilSpecnegated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilfromHex(Ljava/lang/String;)[B68org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator10024com.yubico.internal.util.BinaryUtilSpecreplaced return value with null for com/yubico/internal/util/BinaryUtil::fromHex +BinaryUtil.javacom.yubico.internal.util.BinaryUtilgetUint16([B)I102org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator60com.yubico.internal.util.BinaryUtilSpecnegated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilgetUint16([B)I104org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator414com.yubico.internal.util.BinaryUtilSpecreplaced int return with 0 for com/yubico/internal/util/BinaryUtil::getUint16 +BinaryUtil.javacom.yubico.internal.util.BinaryUtilgetUint32([B)J120org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator60com.yubico.internal.util.BinaryUtilSpecnegated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilgetUint32([B)J122org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator614com.yubico.internal.util.BinaryUtilSpecreplaced long return with 0 for com/yubico/internal/util/BinaryUtil::getUint32 +BinaryUtil.javacom.yubico.internal.util.BinaryUtilgetUint8(B)S91org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator173com.yubico.internal.util.BinaryUtilSpecreplaced short return with 0 for com/yubico/internal/util/BinaryUtil::getUint8 +BinaryUtil.javacom.yubico.internal.util.BinaryUtilreadAll(Ljava/io/InputStream;)[B159org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator252changed conditional boundary +BinaryUtil.javacom.yubico.internal.util.BinaryUtilreadAll(Ljava/io/InputStream;)[B158org.pitest.mutationtest.engine.gregor.mutators.MathMutator191Replaced integer subtraction with addition +BinaryUtil.javacom.yubico.internal.util.BinaryUtilreadAll(Ljava/io/InputStream;)[B162org.pitest.mutationtest.engine.gregor.mutators.MathMutator375Replaced integer addition with subtraction +BinaryUtil.javacom.yubico.internal.util.BinaryUtilreadAll(Ljava/io/InputStream;)[B164org.pitest.mutationtest.engine.gregor.mutators.MathMutator516Replaced integer multiplication with division +BinaryUtil.javacom.yubico.internal.util.BinaryUtilreadAll(Ljava/io/InputStream;)[B159org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator252negated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilreadAll(Ljava/io/InputStream;)[B163org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator445negated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilreadAll(Ljava/io/InputStream;)[B160org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator314replaced return value with null for com/yubico/internal/util/BinaryUtil::readAll +BinaryUtil.javacom.yubico.internal.util.BinaryUtilsingleFromHex(Ljava/lang/String;)B78org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81negated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtilsingleFromHex(Ljava/lang/String;)B77org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator254removed call to com/yubico/internal/util/ExceptionUtil::assertTrue +BinaryUtil.javacom.yubico.internal.util.BinaryUtilsingleFromHex(Ljava/lang/String;)B79org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator326replaced byte return with 0 for com/yubico/internal/util/BinaryUtil::singleFromHex +BinaryUtil.javacom.yubico.internal.util.BinaryUtiltoHex([B)Ljava/lang/String;44org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator181com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)changed conditional boundary +BinaryUtil.javacom.yubico.internal.util.BinaryUtiltoHex([B)Ljava/lang/String;43org.pitest.mutationtest.engine.gregor.mutators.MathMutator60com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)Replaced integer multiplication with division +BinaryUtil.javacom.yubico.internal.util.BinaryUtiltoHex([B)Ljava/lang/String;45org.pitest.mutationtest.engine.gregor.mutators.MathMutator232com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)Replaced integer multiplication with division +BinaryUtil.javacom.yubico.internal.util.BinaryUtiltoHex([B)Ljava/lang/String;46org.pitest.mutationtest.engine.gregor.mutators.MathMutator332com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)Replaced Shift Right with Shift Left +BinaryUtil.javacom.yubico.internal.util.BinaryUtiltoHex([B)Ljava/lang/String;46org.pitest.mutationtest.engine.gregor.mutators.MathMutator352com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)Replaced bitwise AND with OR +BinaryUtil.javacom.yubico.internal.util.BinaryUtiltoHex([B)Ljava/lang/String;47org.pitest.mutationtest.engine.gregor.mutators.MathMutator443com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)Replaced integer addition with subtraction +BinaryUtil.javacom.yubico.internal.util.BinaryUtiltoHex([B)Ljava/lang/String;47org.pitest.mutationtest.engine.gregor.mutators.MathMutator493com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)Replaced bitwise AND with OR +BinaryUtil.javacom.yubico.internal.util.BinaryUtiltoHex([B)Ljava/lang/String;44org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator181com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)negated conditional +BinaryUtil.javacom.yubico.internal.util.BinaryUtiltoHex([B)Ljava/lang/String;49org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator646com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)replaced return value with "" for com/yubico/internal/util/BinaryUtil::toHex +CertificateParser.javacom.yubico.internal.util.CertificateParsercomputeSubjectKeyIdentifier(Ljava/security/cert/Certificate;)[B117org.pitest.mutationtest.engine.gregor.mutators.MathMutator172com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)Replaced integer addition with subtraction +CertificateParser.javacom.yubico.internal.util.CertificateParsercomputeSubjectKeyIdentifier(Ljava/security/cert/Certificate;)[B117org.pitest.mutationtest.engine.gregor.mutators.MathMutator192com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)Replaced integer addition with subtraction +CertificateParser.javacom.yubico.internal.util.CertificateParsercomputeSubjectKeyIdentifier(Ljava/security/cert/Certificate;)[B119org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator355com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)replaced return value with null for com/yubico/internal/util/CertificateParser::computeSubjectKeyIdentifier +CertificateParser.javacom.yubico.internal.util.CertificateParserlambda$parseFidoAaguidExtension$0(Ljava/security/cert/X509Certificate;[B)V158org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator72negated conditional +CertificateParser.javacom.yubico.internal.util.CertificateParserparseAaguid([B)[B134org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +CertificateParser.javacom.yubico.internal.util.CertificateParserparseAaguid([B)[B134org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator81negated conditional +CertificateParser.javacom.yubico.internal.util.CertificateParserparseAaguid([B)[B137org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator194negated conditional +CertificateParser.javacom.yubico.internal.util.CertificateParserparseAaguid([B)[B138org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator256negated conditional +CertificateParser.javacom.yubico.internal.util.CertificateParserparseAaguid([B)[B139org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator318negated conditional +CertificateParser.javacom.yubico.internal.util.CertificateParserparseAaguid([B)[B140org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3710negated conditional +CertificateParser.javacom.yubico.internal.util.CertificateParserparseAaguid([B)[B144org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator5212replaced return value with null for com/yubico/internal/util/CertificateParser::parseAaguid +CertificateParser.javacom.yubico.internal.util.CertificateParserparseDer(Ljava/io/InputStream;)Ljava/security/cert/X509Certificate;80org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator297changed conditional boundary +CertificateParser.javacom.yubico.internal.util.CertificateParserparseDer(Ljava/io/InputStream;)Ljava/security/cert/X509Certificate;81org.pitest.mutationtest.engine.gregor.mutators.MathMutator368com.yubico.internal.util.CertificateParserTest.parsePemDoesNotReturnNull(com.yubico.internal.util.CertificateParserTest)Replaced integer subtraction with addition +CertificateParser.javacom.yubico.internal.util.CertificateParserparseDer(Ljava/io/InputStream;)Ljava/security/cert/X509Certificate;77org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator185negated conditional +CertificateParser.javacom.yubico.internal.util.CertificateParserparseDer(Ljava/io/InputStream;)Ljava/security/cert/X509Certificate;80org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator297com.yubico.internal.util.CertificateParserTest.parsePemDoesNotReturnNull(com.yubico.internal.util.CertificateParserTest)negated conditional +CertificateParser.javacom.yubico.internal.util.CertificateParserparseDer(Ljava/io/InputStream;)Ljava/security/cert/X509Certificate;95org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator9018com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer +CertificateParser.javacom.yubico.internal.util.CertificateParserparseDer(Ljava/lang/String;)Ljava/security/cert/X509Certificate;65org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator72com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer +CertificateParser.javacom.yubico.internal.util.CertificateParserparseDer([B)Ljava/security/cert/X509Certificate;69org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer +CertificateParser.javacom.yubico.internal.util.CertificateParserparseFidoAaguidExtension(Ljava/security/cert/X509Certificate;)Ljava/util/Optional;156org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator193removed call to java/util/Optional::ifPresent +CertificateParser.javacom.yubico.internal.util.CertificateParserparseFidoAaguidExtension(Ljava/security/cert/X509Certificate;)Ljava/util/Optional;165org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator234replaced return value with Optional.empty for com/yubico/internal/util/CertificateParser::parseFidoAaguidExtension +CertificateParser.javacom.yubico.internal.util.CertificateParserparsePem(Ljava/lang/String;)Ljava/security/cert/X509Certificate;57org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator224com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest)replaced return value with null for com/yubico/internal/util/CertificateParser::parsePem +OptionalUtil.javacom.yubico.internal.util.OptionalUtilorElseOptional(Ljava/util/Optional;Ljava/util/function/Supplier;)Ljava/util/Optional;31org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51negated conditional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilorElseOptional(Ljava/util/Optional;Ljava/util/function/Supplier;)Ljava/util/Optional;32org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator92replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orElseOptional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilorElseOptional(Ljava/util/Optional;Ljava/util/function/Supplier;)Ljava/util/Optional;34org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator164replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orElseOptional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilorOptional(Ljava/util/Optional;Ljava/util/Optional;)Ljava/util/Optional;19org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51negated conditional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilorOptional(Ljava/util/Optional;Ljava/util/Optional;)Ljava/util/Optional;20org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator92replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orOptional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilorOptional(Ljava/util/Optional;Ljava/util/Optional;)Ljava/util/Optional;22org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator143replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orOptional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilstream(Ljava/util/Optional;)Ljava/util/stream/Stream;45org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilstream(Ljava/util/Optional;)Ljava/util/stream/Stream;46org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator195replaced return value with Stream.empty for com/yubico/internal/util/OptionalUtil::stream +OptionalUtil.javacom.yubico.internal.util.OptionalUtilzipWith(Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional;57org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51negated conditional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilzipWith(Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional;57org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator83negated conditional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilzipWith(Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional;59org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator2410negated conditional +OptionalUtil.javacom.yubico.internal.util.OptionalUtilzipWith(Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional;58org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator188replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith +OptionalUtil.javacom.yubico.internal.util.OptionalUtilzipWith(Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional;60org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator2811replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith +OptionalUtil.javacom.yubico.internal.util.OptionalUtilzipWith(Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional;62org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator3312replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I53org.pitest.mutationtest.engine.gregor.mutators.MathMutator8125com.yubico.internal.util.ComparableUtilSpecReplaced integer subtraction with addition +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I34org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator72com.yubico.internal.util.ComparableUtilSpecnegated conditional +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I38org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator237com.yubico.internal.util.ComparableUtilSpecnegated conditional +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I38org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator269negated conditional +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I40org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4013com.yubico.internal.util.ComparableUtilSpecnegated conditional +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I45org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5417com.yubico.internal.util.ComparableUtilSpecnegated conditional +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I47org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6420com.yubico.internal.util.ComparableUtilSpecnegated conditional +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I41org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator4414com.yubico.internal.util.ComparableUtilSpecreplaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I46org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator5818replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I48org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator6821replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets +ComparableUtil.javacom.yubico.internal.util.ComparableUtilcompareComparableSets(Ljava/util/SortedSet;Ljava/util/SortedSet;)I53org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator8225com.yubico.internal.util.ComparableUtilSpecreplaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets +CollectionUtil.javacom.yubico.internal.util.CollectionUtilimmutableList(Ljava/util/List;)Ljava/util/List;30org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator82com.yubico.internal.util.CollectionUtilSpecreplaced return value with Collections.emptyList for com/yubico/internal/util/CollectionUtil::immutableList +CollectionUtil.javacom.yubico.internal.util.CollectionUtilimmutableListOrEmpty(Ljava/util/List;)Ljava/util/List;37org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +CollectionUtil.javacom.yubico.internal.util.CollectionUtilimmutableListOrEmpty(Ljava/util/List;)Ljava/util/List;37org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator134replaced return value with Collections.emptyList for com/yubico/internal/util/CollectionUtil::immutableListOrEmpty +CollectionUtil.javacom.yubico.internal.util.CollectionUtilimmutableMap(Ljava/util/Map;)Ljava/util/Map;21org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator82com.yubico.internal.util.CollectionUtilSpecreplaced return value with Collections.emptyMap for com/yubico/internal/util/CollectionUtil::immutableMap +CollectionUtil.javacom.yubico.internal.util.CollectionUtilimmutableSet(Ljava/util/Set;)Ljava/util/Set;46org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator82com.yubico.internal.util.CollectionUtilSpecreplaced return value with Collections.emptySet for com/yubico/internal/util/CollectionUtil::immutableSet +CollectionUtil.javacom.yubico.internal.util.CollectionUtilimmutableSetOrEmpty(Ljava/util/Set;)Ljava/util/Set;51org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40negated conditional +CollectionUtil.javacom.yubico.internal.util.CollectionUtilimmutableSetOrEmpty(Ljava/util/Set;)Ljava/util/Set;51org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator134replaced return value with Collections.emptySet for com/yubico/internal/util/CollectionUtil::immutableSetOrEmpty +CollectionUtil.javacom.yubico.internal.util.CollectionUtilimmutableSortedSet(Ljava/util/Set;)Ljava/util/SortedSet;60org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82com.yubico.internal.util.CollectionUtilSpecreplaced return value with null for com/yubico/internal/util/CollectionUtil::immutableSortedSet +ByteInputStream.javacom.yubico.internal.util.ByteInputStreamread(I)[B40org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator100removed call to com/yubico/internal/util/ByteInputStream::readFully +ByteInputStream.javacom.yubico.internal.util.ByteInputStreamread(I)[B41org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator141replaced return value with null for com/yubico/internal/util/ByteInputStream::read +ByteInputStream.javacom.yubico.internal.util.ByteInputStreamreadAll()[B46org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator111removed call to com/yubico/internal/util/ByteInputStream::readFully +ByteInputStream.javacom.yubico.internal.util.ByteInputStreamreadAll()[B47org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator152replaced return value with null for com/yubico/internal/util/ByteInputStream::readAll +ByteInputStream.javacom.yubico.internal.util.ByteInputStreamreadInteger()I51org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator51replaced int return with 0 for com/yubico/internal/util/ByteInputStream::readInteger +ByteInputStream.javacom.yubico.internal.util.ByteInputStreamreadSigned()B55org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator51replaced byte return with 0 for com/yubico/internal/util/ByteInputStream::readSigned +ByteInputStream.javacom.yubico.internal.util.ByteInputStreamreadUnsigned()I59org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator51replaced int return with 0 for com/yubico/internal/util/ByteInputStream::readUnsigned +JacksonCodecs.javacom.yubico.internal.util.JacksonCodecscbor()Lcom/fasterxml/jackson/databind/ObjectMapper;18org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator113replaced return value with null for com/yubico/internal/util/JacksonCodecs::cbor +JacksonCodecs.javacom.yubico.internal.util.JacksonCodecsdeepCopy(Lcom/fasterxml/jackson/databind/node/ObjectNode;)Lcom/fasterxml/jackson/databind/node/ObjectNode;37org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator104replaced return value with null for com/yubico/internal/util/JacksonCodecs::deepCopy +JacksonCodecs.javacom.yubico.internal.util.JacksonCodecsdeepCopy(Lcom/upokecenter/cbor/CBORObject;)Lcom/upokecenter/cbor/CBORObject;32org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator62replaced return value with null for com/yubico/internal/util/JacksonCodecs::deepCopy +JacksonCodecs.javacom.yubico.internal.util.JacksonCodecsjson()Lcom/fasterxml/jackson/databind/ObjectMapper;22org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator399replaced return value with null for com/yubico/internal/util/JacksonCodecs::json +StreamUtil.javacom.yubico.internal.util.StreamUtillambda$toStream$0(Ljava/util/Iterator;)Ljava/util/Iterator;38org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator40replaced return value with null for com/yubico/internal/util/StreamUtil::lambda$toStream$0 +StreamUtil.javacom.yubico.internal.util.StreamUtiltoSet(Ljava/util/Iterator;)Ljava/util/Set;43org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator94replaced return value with Collections.emptySet for com/yubico/internal/util/StreamUtil::toSet +StreamUtil.javacom.yubico.internal.util.StreamUtiltoStream(Ljava/util/Iterator;)Ljava/util/stream/Stream;39org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator122replaced return value with Stream.empty for com/yubico/internal/util/StreamUtil::toStream +ExceptionUtil.javacom.yubico.internal.util.ExceptionUtilassertTrue(ZLjava/lang/String;[Ljava/lang/Object;)V41org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40com.yubico.internal.util.BinaryUtilSpecnegated conditional +ExceptionUtil.javacom.yubico.internal.util.ExceptionUtilwrapAndLog(Lorg/slf4j/Logger;Ljava/lang/String;Ljava/lang/Throwable;)Ljava/lang/RuntimeException;36org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator193replaced return value with null for com/yubico/internal/util/ExceptionUtil::wrapAndLog + diff --git a/mutation-coverage-reports/yubico-util/style.css b/mutation-coverage-reports/yubico-util/style.css new file mode 100644 index 000000000..303bfba78 --- /dev/null +++ b/mutation-coverage-reports/yubico-util/style.css @@ -0,0 +1,563 @@ +html, body, div, span, p, blockquote, pre { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} + +body{ + line-height: 1; + color: black; + background: white; + margin-left: 20px; +} + +.src { + border: 1px solid #dddddd; + padding-top: 10px; + padding-right: 5px; + padding-left: 5px; + font-family: Consolas, Courier, monospace; +} + +.covered, .COVERED { + background-color: #ddffdd; +} + +.uncovered, .UNCOVERED { + background-color: #ffdddd; +} + +.killed, .KILLED { + background-color: #aaffaa; +} + +.survived, .SURVIVED { + background-color: #ffaaaa; +} + +.uncertain, .UNCERTAIN { + background-color: #dde7ef; +} + +.run_error, .RUN_ERROR { + background-color: #dde7ef; +} + +.na { + background-color: #eeeeee; +} + +.timed_out, .TIMED_OUT { + background-color: #dde7ef; +} + +.non_viable, .NON_VIABLE { + background-color: #aaffaa; +} + +.memory_error, .MEMORY_ERROR { + background-color: #dde7ef; +} + +.not_started, .NO_STARTED { + background-color: #dde7ef; color : red +} + +.no_coverage, .NO_COVERAGE { + background-color: #ffaaaa; +} + +.tests { + width: 50%; + float: left; +} + +.mutees { + float: right; + width: 50%; +} + +.unit { + padding-top: 20px; + clear: both; +} + +.coverage_bar { + display: inline-block; + height: 1.1em; + width: 130px; + background: #FAA; + margin: 0 5px; + vertical-align: middle; + border: 1px solid #AAA; + position: relative; +} + +.coverage_complete { + display: inline-block; + height: 100%; + background: #DFD; + float: left; +} + +.coverage_legend { + position: absolute; + height: 100%; + width: 100%; + left: 0; + top: 0; + text-align: center; +} + +.line, .mut { + vertical-align: middle; +} + +.coverage_percentage { + display: inline-block; + width: 3em; + text-align: right; +} + +.pop { + outline:none; +} + +.pop strong { + line-height: 30px; +} + +.pop { + text-decoration: none; +} + +.pop span { + z-index: 10; + display: none; + padding: 14px 20px; + margin-top: -30px; + margin-left: 28px; + width: 800px; + line-height: 16px; + word-wrap: break-word; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + -moz-box-shadow: 5px 5px 8px #CCC; + -webkit-box-shadow: 5px 5px 8px #CCC; + box-shadow: 5px 5px 8px #CCC; +} + +.pop:hover span { + display: inline; + position: absolute; + color: #111; + border: 1px solid #DCA; + background: #fffAF0; +} + +.width-1 { + width: 1%; +} + +.width-2 { + width: 2%; +} + +.width-3 { + width: 3%; +} + +.width-4 { + width: 4%; +} + +.width-5 { + width: 5%; +} + +.width-6 { + width: 6%; +} + +.width-7 { + width: 7%; +} + +.width-8 { + width: 8%; +} + +.width-9 { + width: 9%; +} + +.width-10 { + width: 10%; +} + +.width-11 { + width: 11%; +} + +.width-12 { + width: 12%; +} + +.width-13 { + width: 13%; +} + +.width-14 { + width: 14%; +} + +.width-15 { + width: 15%; +} + +.width-16 { + width: 16%; +} + +.width-17 { + width: 17%; +} + +.width-18 { + width: 18%; +} + +.width-19 { + width: 19%; +} + +.width-20 { + width: 20%; +} + +.width-21 { + width: 21%; +} + +.width-22 { + width: 22%; +} + +.width-23 { + width: 23%; +} + +.width-24 { + width: 24%; +} + +.width-25 { + width: 25%; +} + +.width-26 { + width: 26%; +} + +.width-27 { + width: 27%; +} + +.width-28 { + width: 28%; +} + +.width-29 { + width: 29%; +} + +.width-30 { + width: 30%; +} + +.width-31 { + width: 31%; +} + +.width-32 { + width: 32%; +} + +.width-33 { + width: 33%; +} + +.width-34 { + width: 34%; +} + +.width-35 { + width: 35%; +} + +.width-36 { + width: 36%; +} + +.width-37 { + width: 37%; +} + +.width-38 { + width: 38%; +} + +.width-39 { + width: 39%; +} + +.width-40 { + width: 40%; +} + +.width-41 { + width: 41%; +} + +.width-42 { + width: 42%; +} + +.width-43 { + width: 43%; +} + +.width-44 { + width: 44%; +} + +.width-45 { + width: 45%; +} + +.width-46 { + width: 46%; +} + +.width-47 { + width: 47%; +} + +.width-48 { + width: 48%; +} + +.width-49 { + width: 49%; +} + +.width-50 { + width: 50%; +} + +.width-51 { + width: 51%; +} + +.width-52 { + width: 52%; +} + +.width-53 { + width: 53%; +} + +.width-54 { + width: 54%; +} + +.width-55 { + width: 55%; +} + +.width-56 { + width: 56%; +} + +.width-57 { + width: 57%; +} + +.width-58 { + width: 58%; +} + +.width-59 { + width: 59%; +} + +.width-60 { + width: 60%; +} + +.width-61 { + width: 61%; +} + +.width-62 { + width: 62%; +} + +.width-63 { + width: 63%; +} + +.width-64 { + width: 64%; +} + +.width-65 { + width: 65%; +} + +.width-66 { + width: 66%; +} + +.width-67 { + width: 67%; +} + +.width-68 { + width: 68%; +} + +.width-69 { + width: 69%; +} + +.width-70 { + width: 70%; +} + +.width-71 { + width: 71%; +} + +.width-72 { + width: 72%; +} + +.width-73 { + width: 73%; +} + +.width-74 { + width: 74%; +} + +.width-75 { + width: 75%; +} + +.width-76 { + width: 76%; +} + +.width-77 { + width: 77%; +} + +.width-78 { + width: 78%; +} + +.width-79 { + width: 79%; +} + +.width-80 { + width: 80%; +} + +.width-81 { + width: 81%; +} + +.width-82 { + width: 82%; +} + +.width-83 { + width: 83%; +} + +.width-84 { + width: 84%; +} + +.width-85 { + width: 85%; +} + +.width-86 { + width: 86%; +} + +.width-87 { + width: 87%; +} + +.width-88 { + width: 88%; +} + +.width-89 { + width: 89%; +} + +.width-90 { + width: 90%; +} + +.width-91 { + width: 91%; +} + +.width-92 { + width: 92%; +} + +.width-93 { + width: 93%; +} + +.width-94 { + width: 94%; +} + +.width-95 { + width: 95%; +} + +.width-96 { + width: 96%; +} + +.width-97 { + width: 97%; +} + +.width-98 { + width: 98%; +} + +.width-99 { + width: 99%; +} + +.width-100 { + width: 100%; +} \ No newline at end of file diff --git a/prev-commit.txt b/prev-commit.txt new file mode 100644 index 000000000..514ac5d50 --- /dev/null +++ b/prev-commit.txt @@ -0,0 +1 @@ +9d08a9d6dc0c50db79567b0aa2e39dbc467022d7 diff --git a/prev-mutations.xml b/prev-mutations.xml new file mode 100644 index 000000000..603bc615f --- /dev/null +++ b/prev-mutations.xml @@ -0,0 +1,52995 @@ + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + builder + + ()Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1; + + 132 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::builder + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + download + + (Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray; + + 1038 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + download + + (Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray; + + 1040 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 20 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + download + + (Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray; + + 1044 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 31 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + removed call to javax/net/ssl/TrustManagerFactory::init + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + download + + (Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray; + + 1046 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 44 + + + + + + 8 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + removed call to javax/net/ssl/SSLContext::init + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + download + + (Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray; + + 1048 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 50 + + + + + + 10 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + removed call to javax/net/ssl/HttpsURLConnection::setSSLSocketFactory + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + download + + (Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray; + + 1055 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 71 + + + + + + 14 + + + + + + removed call to javax/net/ssl/HttpsURLConnection::setRequestMethod + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + download + + (Ljava/net/URL;)Lcom/yubico/webauthn/data/ByteArray; + + 1058 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 78 + + + + + + 17 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::download + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + lambda$loadCachedBlobOnly$0 + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1014 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::lambda$loadCachedBlobOnly$0 + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadCachedBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 718 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 16 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadCachedBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 724 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 39 + + + + + + 9 + + + + + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadCachedBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 732 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 77 + + + + + + 21 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadCachedBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 720 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 27 + + + + + + 6 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadCachedBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 734 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 88 + + + + + + 24 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadCachedBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 743 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 111 + + + + + + 30 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadCachedBlobOnly + + (Ljava/security/cert/X509Certificate;)Ljava/util/Optional; + + 998 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadCachedBlobOnly + + (Ljava/security/cert/X509Certificate;)Ljava/util/Optional; + + 1011 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 50 + + + + + + 10 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::loadCachedBlobOnly + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadExplicitBlobOnly + + (Ljava/security/cert/X509Certificate;)Ljava/util/Optional; + + 985 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + loadExplicitBlobOnly + + (Ljava/security/cert/X509Certificate;)Ljava/util/Optional; + + 986 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 25 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::loadExplicitBlobOnly + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + parseAndMaybeVerifyBlob + + (Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1084 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + parseAndMaybeVerifyBlob + + (Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1085 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 11 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndMaybeVerifyBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + parseAndMaybeVerifyBlob + + (Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1087 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 20 + + + + + + 6 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndMaybeVerifyBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + parseAndVerifyBlob + + (Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1071 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseAndVerifyBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + parseBlob + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult; + + 1179 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 76 + + + + + + 20 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::parseBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + readAll + + (Ljava/io/InputStream;)Lcom/yubico/webauthn/data/ByteArray; + + 1190 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::readAll + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + readCacheFile + + (Ljava/io/File;)Ljava/util/Optional; + + 1023 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + readCacheFile + + (Ljava/io/File;)Ljava/util/Optional; + + 1023 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + readCacheFile + + (Ljava/io/File;)Ljava/util/Optional; + + 1023 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 821 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 16 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 827 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 39 + + + + + + 9 + + + + + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 823 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 27 + + + + + + 6 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlob + + ()Lcom/yubico/fido/metadata/MetadataBLOB; + + 833 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 61 + + + + + + 15 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 857 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 64 + + + + + + 18 + + + + + + changed conditional boundary + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 837 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 837 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 13 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 855 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 48 + + + + + + 11 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 857 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 64 + + + + + + 18 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 865 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 95 + + + + + + 26 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 870 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 117 + + + + + + 31 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 876 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 161 + + + + + + 41 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 882 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 184 + + + + + + 46 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 882 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 187 + + + + + + 48 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 889 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 210 + + + + + + 53 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 872 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 131 + + + + + + 34 + + + + + + removed call to java/io/FileOutputStream::write + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 877 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 167 + + + + + + 42 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + removed call to java/util/function/Consumer::accept + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 859 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 74 + + + + + + 20 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 880 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 174 + + + + + + 44 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 884 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 196 + + + + + + 50 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + refreshBlobInternal + + (Ljava/security/cert/X509Certificate;Ljava/util/Optional;)Ljava/util/Optional; + + 891 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 220 + + + + + + 55 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataDownloader::refreshBlobInternal + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 910 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 915 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 16 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 922 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 43 + + + + + + 8 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 924 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 56 + + + + + + 11 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 936 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 88 + + + + + + 19 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 938 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 102 + + + + + + 22 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 946 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 129 + + + + + + 30 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 952 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 173 + + + + + + 40 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 928 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 72 + + + + + + 16 + + + + + + removed call to java/security/cert/X509Certificate::checkValidity + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 944 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 124 + + + + + + 29 + + + + + + removed call to java/security/cert/X509Certificate::checkValidity + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 948 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 143 + + + + + + 33 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + removed call to java/io/FileOutputStream::write + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 953 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 179 + + + + + + 41 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + removed call to java/util/function/Consumer::accept + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 911 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::retrieveTrustRootCert + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + retrieveTrustRootCert + + ()Ljava/security/cert/X509Certificate; + + 957 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 184 + + + + + + 42 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::retrieveTrustRootCert + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1103 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 12 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1105 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 24 + + + + + + 7 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1106 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 33 + + + + + + 11 + + + + + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1107 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 42 + + + + + + 15 + + + + + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1108 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 50 + + + + + + 18 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1123 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 142 + + + + + + 36 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1150 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 273 + + + + + + 80 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1159 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 316 + + + + + + 89 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1146 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 239 + + + + + + 65 + + + + com.yubico.fido.metadata.FidoMds3Spec + + removed call to java/security/Signature::initVerify + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1147 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 265 + + + + + + 76 + + + + com.yubico.fido.metadata.FidoMds3Spec + + removed call to java/security/Signature::update + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1160 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 322 + + + + + + 90 + + + + com.yubico.fido.metadata.FidoMds3Spec + + removed call to java/security/cert/PKIXParameters::addCertStore + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1162 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 331 + + + + + + 93 + + + + com.yubico.fido.metadata.FidoMds3Spec + + removed call to java/security/cert/PKIXParameters::setDate + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyBlob + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$ParseResult;Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/MetadataBLOB; + + 1165 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 343 + + + + + + 96 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::verifyBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyHash + + (Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)Lcom/yubico/webauthn/data/ByteArray; + + 1201 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 26 + + + + + + 7 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader + + verifyHash + + (Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)Lcom/yubico/webauthn/data/ByteArray; + + 1202 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 30 + + + + + + 8 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader::verifyHash + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + <init> + + (Lcom/yubico/fido/metadata/MetadataBLOBPayload;Ljava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/security/cert/CertStore;)V + + 103 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + <init> + + (Lcom/yubico/fido/metadata/MetadataBLOBPayload;Ljava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/security/cert/CertStore;)V + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + <init> + + (Lcom/yubico/fido/metadata/MetadataBLOBPayload;Ljava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/security/cert/CertStore;)V + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + buildAaguidMap + + (Ljava/util/List;)Ljava/util/HashMap; + + 182 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + buildAaguidMap + + (Ljava/util/List;)Ljava/util/HashMap; + + 184 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 24 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::buildAaguidMap + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + buildCkiMap + + (Ljava/util/List;)Ljava/util/HashMap; + + 150 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + buildCkiMap + + (Ljava/util/List;)Ljava/util/HashMap; + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 24 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::buildCkiMap + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + builder + + ()Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1; + + 217 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::builder + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set; + + 611 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set; + + 612 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 17 + + + + + + 5 + + + + + + replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Lcom/yubico/webauthn/RegistrationResult;)Ljava/util/Set; + + 599 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Lcom/yubico/webauthn/RegistrationResult;)Ljava/util/Set; + + 600 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 30 + + + + + + 6 + + + + + + replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/List;)Ljava/util/Set; + + 572 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/List;)Ljava/util/Set; + + 573 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 17 + + + + + + 5 + + + + + + replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/List;Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set; + + 582 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/List;Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set; + + 582 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 13 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/List;Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/Set; + + 583 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 27 + + + + + + 8 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/List;Ljava/util/Optional;)Ljava/util/Set; + + 498 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/List;Ljava/util/Optional;)Ljava/util/Set; + + 499 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/List;Ljava/util/Optional;)Ljava/util/Set; + + 563 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 143 + + + + + + 26 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/function/Predicate;)Ljava/util/Set; + + 629 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findEntries + + (Ljava/util/function/Predicate;)Ljava/util/Set; + + 630 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 53 + + + + + + 15 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::findEntries + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + findTrustRoots + + (Ljava/util/List;Ljava/util/Optional;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult; + + 643 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 51 + + + + + + 14 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::findTrustRoots + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + ignoreInvalidUpdateAvailableAuthenticatorVersion + + (Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 25 + + + + + + 6 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::ignoreInvalidUpdateAvailableAuthenticatorVersion + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + ignoreInvalidUpdateAvailableAuthenticatorVersion + + (Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 25 + + + + + + 6 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::ignoreInvalidUpdateAvailableAuthenticatorVersion + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildAaguidMap$11 + + (Lcom/yubico/fido/metadata/AAGUID;)Z + + 195 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildAaguidMap$11 + + (Lcom/yubico/fido/metadata/AAGUID;)Z + + 195 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 13 + + + + + + 4 + + + + + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$11 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildAaguidMap$12 + + (Lcom/yubico/fido/metadata/AAGUID;)Z + + 200 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildAaguidMap$12 + + (Lcom/yubico/fido/metadata/AAGUID;)Z + + 200 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 13 + + + + + + 4 + + + + + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$12 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildAaguidMap$13 + + (Ljava/util/HashMap;Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)V + + 196 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 20 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + removed call to java/util/Optional::ifPresent + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildAaguidMap$13 + + (Ljava/util/HashMap;Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)V + + 201 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 38 + + + + + + 6 + + + + + + removed call to java/util/Optional::ifPresent + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildAaguidMap$14 + + (Ljava/util/HashSet;Ljava/util/HashSet;)Ljava/util/HashSet; + + 210 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$14 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildAaguidMap$9 + + (Lcom/yubico/fido/metadata/AAGUID;)Ljava/util/HashSet; + + 191 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildAaguidMap$9 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildCkiMap$4 + + (Ljava/lang/String;)Ljava/util/HashSet; + + 158 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$4 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildCkiMap$5 + + (Ljava/lang/String;)Ljava/util/HashSet; + + 165 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$5 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$buildCkiMap$7 + + (Ljava/util/HashSet;Ljava/util/HashSet;)Ljava/util/HashSet; + + 175 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService::lambda$buildCkiMap$7 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findEntries$16 + + (Ljava/security/cert/X509Certificate;)Ljava/lang/String; + + 506 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 13 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with "" for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$16 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findEntries$17 + + (Lcom/yubico/fido/metadata/AAGUID;)Z + + 517 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findEntries$17 + + (Lcom/yubico/fido/metadata/AAGUID;)Z + + 517 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 13 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$17 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findEntries$18 + + (Ljava/util/List;)Ljava/util/Optional; + + 520 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 10 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findEntries$18 + + (Ljava/util/List;)Ljava/util/Optional; + + 523 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 37 + + + + + + 9 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$18 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findEntries$19 + + (Ljava/lang/String;)Ljava/util/stream/Stream; + + 548 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Stream.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$19 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findEntries$20 + + (Ljava/util/List;Ljava/util/Optional;Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z + + 551 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 20 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$20 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findEntries$20 + + (Ljava/util/List;Ljava/util/Optional;Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z + + 551 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 20 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$20 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findEntries$21 + + (Lcom/yubico/webauthn/RegistrationResult;Ljava/util/List;)Ljava/util/Set; + + 602 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 11 + + + + + + 3 + + + + + + replaced return value with Collections.emptySet for com/yubico/fido/metadata/FidoMetadataService::lambda$findEntries$21 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findTrustRoots$22 + + (Lcom/yubico/fido/metadata/MetadataStatement;)Ljava/util/stream/Stream; + + 650 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Stream.empty for com/yubico/fido/metadata/FidoMetadataService::lambda$findTrustRoots$22 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$findTrustRoots$23 + + (Ljava/security/cert/PolicyNode;)Z + + 654 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$findTrustRoots$23 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 + + (Lcom/yubico/fido/metadata/StatusReport;)Z + + 139 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 + + (Lcom/yubico/fido/metadata/StatusReport;)Z + + 139 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 2 + + + + + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$0 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 + + (Ljava/lang/Long;Ljava/lang/Long;)Ljava/lang/Boolean; + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 8 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + changed conditional boundary + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 + + (Ljava/lang/Long;Ljava/lang/Long;)Ljava/lang/Boolean; + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 + + (Ljava/lang/Long;Ljava/lang/Long;)Ljava/lang/Boolean; + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 17 + + + + + + 6 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced Boolean return with True for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$1 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 + + (Ljava/lang/Long;Lcom/yubico/fido/metadata/StatusReport;)Z + + 145 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 + + (Ljava/lang/Long;Lcom/yubico/fido/metadata/StatusReport;)Z + + 145 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$2 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 + + (Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;Ljava/lang/Long;)Ljava/lang/Boolean; + + 136 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 18 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced Boolean return with False for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService + + lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 + + (Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;Ljava/lang/Long;)Ljava/lang/Boolean; + + 136 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 18 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced Boolean return with True for com/yubico/fido/metadata/FidoMetadataService::lambda$ignoreInvalidUpdateAvailableAuthenticatorVersion$3 + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 235 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 237 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 238 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 239 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 38 + + + + + + 10 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 240 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 48 + + + + + + 13 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 241 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 58 + + + + + + 16 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 242 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 68 + + + + + + 19 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 245 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 78 + + + + + + 22 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 248 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 88 + + + + + + 25 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + <init> + + (Ljava/lang/String;Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Ljava/lang/String;Lcom/yubico/fido/metadata/AlternativeDescriptions;JLcom/yubico/fido/metadata/ProtocolFamily;ILjava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/Integer;Ljava/util/Set;Ljava/util/Set;Ljava/lang/String;Ljava/util/List;Ljava/util/Set;Ljava/lang/String;Ljava/util/Set;Lcom/yubico/fido/metadata/AuthenticatorGetInfo;)V + + 251 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 98 + + + + + + 28 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getAaguid + + ()Ljava/util/Optional; + + 309 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAaguid + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getAaid + + ()Ljava/util/Optional; + + 300 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAaid + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getAlternativeDescriptions + + ()Ljava/util/Optional; + + 327 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAlternativeDescriptions + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getAttachmentHint + + ()Ljava/util/Optional; + + 363 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAttachmentHint + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getAuthenticatorGetInfo + + ()Ljava/util/Optional; + + 408 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getAuthenticatorGetInfo + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getCryptoStrength + + ()Ljava/util/Optional; + + 354 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getCryptoStrength + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getDescription + + ()Ljava/util/Optional; + + 318 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getDescription + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getIcon + + ()Ljava/util/Optional; + + 390 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIcon + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getIsFreshUserVerificationRequired + + ()Ljava/util/Optional; + + 345 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIsFreshUserVerificationRequired + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getIsKeyRestricted + + ()Ljava/util/Optional; + + 336 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getIsKeyRestricted + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getLegalHeader + + ()Ljava/util/Optional; + + 291 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getLegalHeader + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getSupportedExtensions + + ()Ljava/util/Optional; + + 399 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getSupportedExtensions + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getTcDisplayContentType + + ()Ljava/util/Optional; + + 372 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getTcDisplayContentType + + + + + + MetadataStatement.java + + com.yubico.fido.metadata.MetadataStatement + + getTcDisplayPNGCharacteristics + + ()Ljava/util/Optional; + + 381 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataStatement::getTcDisplayPNGCharacteristics + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getAaguid + + ()Ljava/util/Optional; + + 193 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getAaguid + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getAlgorithms + + ()Ljava/util/Optional; + + 256 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getAlgorithms + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getCertifications + + ()Ljava/util/Optional; + + 337 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getCertifications + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getExtensions + + ()Ljava/util/Optional; + + 184 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getExtensions + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getFirmwareVersion + + ()Ljava/util/Optional; + + 292 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getFirmwareVersion + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getForcePINChange + + ()Ljava/util/Optional; + + 274 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getForcePINChange + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getMaxCredBlobLength + + ()Ljava/util/Optional; + + 301 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredBlobLength + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getMaxCredentialCountInList + + ()Ljava/util/Optional; + + 229 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredentialCountInList + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getMaxCredentialIdLength + + ()Ljava/util/Optional; + + 238 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxCredentialIdLength + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getMaxMsgSize + + ()Ljava/util/Optional; + + 211 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxMsgSize + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getMaxRPIDsForSetMinPINLength + + ()Ljava/util/Optional; + + 310 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxRPIDsForSetMinPINLength + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getMaxSerializedLargeBlobArray + + ()Ljava/util/Optional; + + 265 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMaxSerializedLargeBlobArray + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getMinPINLength + + ()Ljava/util/Optional; + + 283 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getMinPINLength + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getOptions + + ()Ljava/util/Optional; + + 202 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getOptions + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getPinUvAuthProtocols + + ()Ljava/util/Optional; + + 220 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getPinUvAuthProtocols + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getPreferredPlatformUvAttempts + + ()Ljava/util/Optional; + + 319 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getPreferredPlatformUvAttempts + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getRemainingDiscoverableCredentials + + ()Ljava/util/Optional; + + 346 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getRemainingDiscoverableCredentials + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getTransports + + ()Ljava/util/Optional; + + 247 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getTransports + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getUvModality + + ()Ljava/util/Optional; + + 328 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getUvModality + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo + + getVendorPrototypeConfigCommands + + ()Ljava/util/Optional; + + 355 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AuthenticatorGetInfo::getVendorPrototypeConfigCommands + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + allOf + + ([Ljava/util/function/Predicate;)Ljava/util/function/Predicate; + + 364 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 5 + + + + + + 0 + + + + + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::allOf + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$allOf$0 + + (Ljava/lang/Object;Ljava/util/function/Predicate;)Z + + 364 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$0 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$allOf$0 + + (Ljava/lang/Object;Ljava/util/function/Predicate;)Z + + 364 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$0 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$allOf$1 + + ([Ljava/util/function/Predicate;Ljava/lang/Object;)Z + + 364 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 8 + + + + + + 2 + + + + + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$1 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$allOf$1 + + ([Ljava/util/function/Predicate;Ljava/lang/Object;)Z + + 364 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 8 + + + + + + 2 + + + + + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$allOf$1 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$noAttestationKeyCompromise$4 + + (Lcom/yubico/fido/metadata/StatusReport;)Z + + 400 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$4 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$noAttestationKeyCompromise$4 + + (Lcom/yubico/fido/metadata/StatusReport;)Z + + 400 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$4 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$noAttestationKeyCompromise$5 + + (Lcom/yubico/fido/metadata/StatusReport;Ljava/security/cert/X509Certificate;)Z + + 408 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 25 + + + + + + 7 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$5 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$noAttestationKeyCompromise$5 + + (Lcom/yubico/fido/metadata/StatusReport;Ljava/security/cert/X509Certificate;)Z + + 408 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 25 + + + + + + 7 + + + + + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$5 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$noAttestationKeyCompromise$6 + + (Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;Lcom/yubico/fido/metadata/StatusReport;)Z + + 404 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$noAttestationKeyCompromise$6 + + (Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;Lcom/yubico/fido/metadata/StatusReport;)Z + + 406 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 17 + + + + + + 6 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$noAttestationKeyCompromise$6 + + (Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;Lcom/yubico/fido/metadata/StatusReport;)Z + + 404 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 28 + + + + + + 9 + + + + + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$6 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$noAttestationKeyCompromise$7 + + (Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;)Z + + 397 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 18 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$7 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$noAttestationKeyCompromise$7 + + (Lcom/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered;)Z + + 397 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 18 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$noAttestationKeyCompromise$7 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$notRevoked$2 + + (Lcom/yubico/fido/metadata/StatusReport;)Z + + 378 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$2 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$notRevoked$2 + + (Lcom/yubico/fido/metadata/StatusReport;)Z + + 378 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$2 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$notRevoked$3 + + (Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z + + 376 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 12 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$3 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + lambda$notRevoked$3 + + (Lcom/yubico/fido/metadata/MetadataBLOBPayloadEntry;)Z + + 376 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 12 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/FidoMetadataService$Filters::lambda$notRevoked$3 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + noAttestationKeyCompromise + + ()Ljava/util/function/Predicate; + + 396 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::noAttestationKeyCompromise + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters + + notRevoked + + ()Ljava/util/function/Predicate; + + 375 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$Filters::notRevoked + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + build + + ()Lcom/yubico/fido/metadata/FidoMetadataDownloader; + + 156 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 39 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::build + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + clock + + (Ljava/time/Clock;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 539 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + clock + + (Ljava/time/Clock;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 541 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::clock + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + finishRequiredSteps + + (Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5;Ljava/io/File;Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 514 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 59 + + + + + + 22 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::finishRequiredSteps + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + trustHttpsCerts + + ([Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 592 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + trustHttpsCerts + + ([Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 596 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 20 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + removed call to java/security/KeyStore::load + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + trustHttpsCerts + + ([Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 607 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 61 + + + + + + 13 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + removed call to java/security/KeyStore::setCertificateEntry + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + trustHttpsCerts + + ([Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 616 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 91 + + + + + + 18 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::trustHttpsCerts + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + useCrls + + (Ljava/security/cert/CertStore;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 573 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::useCrls + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + useCrls + + (Ljava/util/Collection;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 557 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + useCrls + + (Ljava/util/Collection;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 559 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 6 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::useCrls + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder + + verifyDownloadsOnly + + (Z)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 636 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder::verifyDownloadsOnly + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + <init> + + (Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Lcom/yubico/fido/metadata/MetadataStatement;Ljava/util/List;Ljava/util/List;Ljava/time/LocalDate;Ljava/net/URL;Lcom/yubico/webauthn/data/ByteArray;)V + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + <init> + + (Lcom/yubico/fido/metadata/AAID;Lcom/yubico/fido/metadata/AAGUID;Ljava/util/Set;Lcom/yubico/fido/metadata/MetadataStatement;Ljava/util/List;Ljava/util/List;Ljava/time/LocalDate;Ljava/net/URL;Lcom/yubico/webauthn/data/ByteArray;)V + + 99 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + getAaguid + + ()Ljava/util/Optional; + + 134 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getAaguid + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + getAaid + + ()Ljava/util/Optional; + + 125 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getAaid + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + getMetadataStatement + + ()Ljava/util/Optional; + + 143 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getMetadataStatement + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + getRogueListHash + + ()Ljava/util/Optional; + + 170 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getRogueListHash + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + getRogueListURL + + ()Ljava/util/Optional; + + 161 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getRogueListURL + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + getTimeOfLastStatusChange + + ()Ljava/util/Optional; + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.JsonIoSpec + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::getTimeOfLastStatusChange + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + lambda$new$0 + + (Lcom/yubico/fido/metadata/StatusReport;)Z + + 112 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataBLOBPayloadEntry.java + + com.yubico.fido.metadata.MetadataBLOBPayloadEntry + + lambda$new$0 + + (Lcom/yubico/fido/metadata/StatusReport;)Z + + 112 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 15 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/MetadataBLOBPayloadEntry::lambda$new$0 + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 54 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 12 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 53 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 37 + + + + + + 7 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + asBytes + + ()Lcom/yubico/webauthn/data/ByteArray; + + 68 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/AAGUID::asBytes + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + asGuidString + + ()Ljava/lang/String; + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 60 + + + + + + 7 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with "" for com/yubico/fido/metadata/AAGUID::asGuidString + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + asHexString + + ()Ljava/lang/String; + + 76 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with "" for com/yubico/fido/metadata/AAGUID::asHexString + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + fromString + + (Ljava/lang/String;)Lcom/yubico/fido/metadata/AAGUID; + + 124 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/AAGUID::fromString + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + isZero + + ()Z + + 101 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with false for com/yubico/fido/metadata/AAGUID::isZero + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + isZero + + ()Z + + 101 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced boolean return with true for com/yubico/fido/metadata/AAGUID::isZero + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + parse + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 106 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + AAGUID.java + + com.yubico.fido.metadata.AAGUID + + parse + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 108 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 48 + + + + + + 17 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/AAGUID::parse + + + + + + StatusReport.java + + com.yubico.fido.metadata.StatusReport + + getAuthenticatorVersion + + ()Ljava/util/Optional; + + 115 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getAuthenticatorVersion + + + + + + StatusReport.java + + com.yubico.fido.metadata.StatusReport + + getCertificate + + ()Ljava/util/Optional; + + 125 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificate + + + + + + StatusReport.java + + com.yubico.fido.metadata.StatusReport + + getCertificateNumber + + ()Ljava/util/Optional; + + 169 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificateNumber + + + + + + StatusReport.java + + com.yubico.fido.metadata.StatusReport + + getCertificationDescriptor + + ()Ljava/util/Optional; + + 160 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationDescriptor + + + + + + StatusReport.java + + com.yubico.fido.metadata.StatusReport + + getCertificationPolicyVersion + + ()Ljava/util/Optional; + + 178 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationPolicyVersion + + + + + + StatusReport.java + + com.yubico.fido.metadata.StatusReport + + getCertificationRequirementsVersion + + ()Ljava/util/Optional; + + 187 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getCertificationRequirementsVersion + + + + + + StatusReport.java + + com.yubico.fido.metadata.StatusReport + + getEffectiveDate + + ()Ljava/util/Optional; + + 106 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getEffectiveDate + + + + + + StatusReport.java + + com.yubico.fido.metadata.StatusReport + + getUrl + + ()Ljava/util/Optional; + + 135 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 10 + + + + + + 2 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getUrl + + + + + + StatusReport.java + + com.yubico.fido.metadata.StatusReport + + getUrlAsString + + ()Ljava/util/Optional; + + 151 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/StatusReport::getUrlAsString + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder + + build + + ()Lcom/yubico/fido/metadata/FidoMetadataService; + + 339 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 15 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::build + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder + + certStore + + (Ljava/security/cert/CertStore;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 322 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder + + certStore + + (Ljava/security/cert/CertStore;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 324 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::certStore + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder + + filter + + (Ljava/util/function/Predicate;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 308 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder + + filter + + (Ljava/util/function/Predicate;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 310 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::filter + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder + + prefilter + + (Ljava/util/function/Predicate;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 275 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder + + prefilter + + (Ljava/util/function/Predicate;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 277 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder::prefilter + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2 + + downloadTrustRoot + + (Ljava/net/URL;Ljava/util/Set;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3; + + 295 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2 + + downloadTrustRoot + + (Ljava/net/URL;Ljava/util/Set;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3; + + 295 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 13 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2 + + downloadTrustRoot + + (Ljava/net/URL;Ljava/util/Set;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3; + + 296 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 26 + + + + + + 8 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2 + + downloadTrustRoot + + (Ljava/net/URL;Ljava/util/Set;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3; + + 299 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 45 + + + + + + 12 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::downloadTrustRoot + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2 + + useDefaultTrustRoot + + ()Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3; + + 266 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 4 + + + + + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::useDefaultTrustRoot + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2 + + useTrustRoot + + (Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4; + + 308 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2 + + useTrustRoot + + (Ljava/security/cert/X509Certificate;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4; + + 309 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 28 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2::useTrustRoot + + + + + + AlternativeDescriptions.java + + com.yubico.fido.metadata.AlternativeDescriptions + + get + + (Ljava/lang/String;)Ljava/util/Optional; + + 42 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 29 + + + + + + 6 + + + + + + changed conditional boundary + + + + + + AlternativeDescriptions.java + + com.yubico.fido.metadata.AlternativeDescriptions + + get + + (Ljava/lang/String;)Ljava/util/Optional; + + 38 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 1 + + + + + + negated conditional + + + + + + AlternativeDescriptions.java + + com.yubico.fido.metadata.AlternativeDescriptions + + get + + (Ljava/lang/String;)Ljava/util/Optional; + + 42 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 29 + + + + + + 6 + + + + + + negated conditional + + + + + + AlternativeDescriptions.java + + com.yubico.fido.metadata.AlternativeDescriptions + + get + + (Ljava/lang/String;)Ljava/util/Optional; + + 42 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 36 + + + + + + 8 + + + + + + negated conditional + + + + + + AlternativeDescriptions.java + + com.yubico.fido.metadata.AlternativeDescriptions + + get + + (Ljava/lang/String;)Ljava/util/Optional; + + 39 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 16 + + + + + + 4 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AlternativeDescriptions::get + + + + + + AlternativeDescriptions.java + + com.yubico.fido.metadata.AlternativeDescriptions + + get + + (Ljava/lang/String;)Ljava/util/Optional; + + 43 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 47 + + + + + + 11 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/AlternativeDescriptions::get + + + + + + MetadataBLOBHeader.java + + com.yubico.fido.metadata.MetadataBLOBHeader + + <init> + + (Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/util/List;)V + + 58 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataBLOBHeader.java + + com.yubico.fido.metadata.MetadataBLOBHeader + + <init> + + (Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/util/List;)V + + 64 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 36 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + MetadataBLOBHeader.java + + com.yubico.fido.metadata.MetadataBLOBHeader + + <init> + + (Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/util/List;)V + + 64 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 40 + + + + + + 6 + + + + com.yubico.fido.metadata.JsonIoSpec + + negated conditional + + + + + + MetadataBLOBHeader.java + + com.yubico.fido.metadata.MetadataBLOBHeader + + getTyp + + ()Ljava/util/Optional; + + 74 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getTyp + + + + + + MetadataBLOBHeader.java + + com.yubico.fido.metadata.MetadataBLOBHeader + + getX5c + + ()Ljava/util/Optional; + + 90 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getX5c + + + + + + MetadataBLOBHeader.java + + com.yubico.fido.metadata.MetadataBLOBHeader + + getX5u + + ()Ljava/util/Optional; + + 82 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with Optional.empty for com/yubico/fido/metadata/MetadataBLOBHeader::getX5u + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializer + + lambda$serialize$0 + + (Ljava/lang/Integer;Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Ljava/lang/Integer; + + 377 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 7 + + + + + + 2 + + + + com.yubico.fido.metadata.JsonIoSpec + + Replaced bitwise OR with AND + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializer + + lambda$serialize$0 + + (Ljava/lang/Integer;Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Ljava/lang/Integer; + + 377 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.fido.metadata.JsonIoSpec + + replaced Integer return value with 0 for com/yubico/fido/metadata/AuthenticatorGetInfo$IntFromSetJsonSerializer::lambda$serialize$0 + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializer + + lambda$serialize$1 + + (Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer; + + 377 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 7 + + + + + + 2 + + + + + + Replaced bitwise OR with AND + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializer + + lambda$serialize$1 + + (Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer; + + 377 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 3 + + + + + + replaced Integer return value with 0 for com/yubico/fido/metadata/AuthenticatorGetInfo$IntFromSetJsonSerializer::lambda$serialize$1 + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo$IntFromSetJsonSerializer + + serialize + + (Ljava/util/Set;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V + + 376 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 17 + + + + + + 4 + + + + com.yubico.fido.metadata.JsonIoSpec + + removed call to com/fasterxml/jackson/core/JsonGenerator::writeNumber + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4 + + downloadBlob + + (Ljava/net/URL;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5; + + 423 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4 + + downloadBlob + + (Ljava/net/URL;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5; + + 424 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 20 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::downloadBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4 + + useBlob + + (Ljava/lang/String;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 445 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4 + + useBlob + + (Ljava/lang/String;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 446 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 24 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::useBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4 + + useDefaultBlob + + ()Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5; + + 405 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4::useDefaultBlob + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5 + + useBlobCache + + (Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 503 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5 + + useBlobCache + + (Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 504 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5 + + useBlobCache + + (Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 505 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5::useBlobCache + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5 + + useBlobCacheFile + + (Ljava/io/File;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 479 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5 + + useBlobCacheFile + + (Ljava/io/File;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder; + + 480 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step5::useBlobCacheFile + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3 + + useTrustRootCache + + (Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4; + + 365 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3 + + useTrustRootCache + + (Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4; + + 366 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3 + + useTrustRootCache + + (Ljava/util/function/Supplier;Ljava/util/function/Consumer;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4; + + 367 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 31 + + + + + + 7 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3::useTrustRootCache + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3 + + useTrustRootCacheFile + + (Ljava/io/File;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4; + + 342 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3 + + useTrustRootCacheFile + + (Ljava/io/File;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step4; + + 343 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step3::useTrustRootCacheFile + + + + + + BiometricAccuracyDescriptor.java + + com.yubico.fido.metadata.BiometricAccuracyDescriptor + + getBlockSlowdown + + ()Ljava/util/Optional; + + 73 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getBlockSlowdown + + + + + + BiometricAccuracyDescriptor.java + + com.yubico.fido.metadata.BiometricAccuracyDescriptor + + getMaxRetries + + ()Ljava/util/Optional; + + 64 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getMaxRetries + + + + + + BiometricAccuracyDescriptor.java + + com.yubico.fido.metadata.BiometricAccuracyDescriptor + + getMaxTemplates + + ()Ljava/util/Optional; + + 55 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getMaxTemplates + + + + + + BiometricAccuracyDescriptor.java + + com.yubico.fido.metadata.BiometricAccuracyDescriptor + + getSelfAttestedFAR + + ()Ljava/util/Optional; + + 46 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getSelfAttestedFAR + + + + + + BiometricAccuracyDescriptor.java + + com.yubico.fido.metadata.BiometricAccuracyDescriptor + + getSelfAttestedFRR + + ()Ljava/util/Optional; + + 37 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricAccuracyDescriptor::getSelfAttestedFRR + + + + + + BiometricStatusReport.java + + com.yubico.fido.metadata.BiometricStatusReport + + getCertificateNumber + + ()Ljava/util/Optional; + + 67 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificateNumber + + + + + + BiometricStatusReport.java + + com.yubico.fido.metadata.BiometricStatusReport + + getCertificationDescriptor + + ()Ljava/util/Optional; + + 58 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationDescriptor + + + + + + BiometricStatusReport.java + + com.yubico.fido.metadata.BiometricStatusReport + + getCertificationPolicyVersion + + ()Ljava/util/Optional; + + 76 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationPolicyVersion + + + + + + BiometricStatusReport.java + + com.yubico.fido.metadata.BiometricStatusReport + + getCertificationRequirementsVersion + + ()Ljava/util/Optional; + + 85 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getCertificationRequirementsVersion + + + + + + BiometricStatusReport.java + + com.yubico.fido.metadata.BiometricStatusReport + + getEffectiveDate + + ()Ljava/util/Optional; + + 49 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/BiometricStatusReport::getEffectiveDate + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo$SetFromIntJsonDeserializer + + deserialize + + (Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;)Ljava/util/Set; + + 364 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 23 + + + + + + 7 + + + + com.yubico.fido.metadata.JsonIoSpec + + replaced return value with Collections.emptySet for com/yubico/fido/metadata/AuthenticatorGetInfo$SetFromIntJsonDeserializer::deserialize + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo$SetFromIntJsonDeserializer + + lambda$deserialize$0 + + (ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z + + 365 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.JsonIoSpec + + Replaced bitwise AND with OR + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo$SetFromIntJsonDeserializer + + lambda$deserialize$0 + + (ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z + + 365 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.fido.metadata.JsonIoSpec + + negated conditional + + + + + + AuthenticatorGetInfo.java + + com.yubico.fido.metadata.AuthenticatorGetInfo$SetFromIntJsonDeserializer + + lambda$deserialize$0 + + (ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z + + 365 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 15 + + + + + + 4 + + + + com.yubico.fido.metadata.JsonIoSpec + + replaced boolean return with true for com/yubico/fido/metadata/AuthenticatorGetInfo$SetFromIntJsonDeserializer::lambda$deserialize$0 + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder$Step1 + + useBlob + + (Lcom/yubico/fido/metadata/MetadataBLOB;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 240 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder$Step1 + + useBlob + + (Lcom/yubico/fido/metadata/MetadataBLOB;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 241 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1::useBlob + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder$Step1 + + useBlob + + (Lcom/yubico/fido/metadata/MetadataBLOBPayload;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 253 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$FidoMetadataServiceBuilder$Step1 + + useBlob + + (Lcom/yubico/fido/metadata/MetadataBLOBPayload;)Lcom/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder; + + 254 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataService$FidoMetadataServiceBuilder$Step1::useBlob + + + + + + CertToBase64Converter.java + + com.yubico.fido.metadata.CertToBase64Converter + + convert + + (Ljava/security/cert/X509Certificate;)Ljava/lang/String; + + 14 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.fido.metadata.JsonIoSpec + + replaced return value with "" for com/yubico/fido/metadata/CertToBase64Converter::convert + + + + + + CertToBase64Converter.java + + com.yubico.fido.metadata.CertToBase64Converter + + getInputType + + (Lcom/fasterxml/jackson/databind/type/TypeFactory;)Lcom/fasterxml/jackson/databind/JavaType; + + 22 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/fido/metadata/CertToBase64Converter::getInputType + + + + + + CertToBase64Converter.java + + com.yubico.fido.metadata.CertToBase64Converter + + getOutputType + + (Lcom/fasterxml/jackson/databind/type/TypeFactory;)Lcom/fasterxml/jackson/databind/JavaType; + + 27 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.JsonIoSpec + + replaced return value with null for com/yubico/fido/metadata/CertToBase64Converter::getOutputType + + + + + + CertFromBase64Converter.java + + com.yubico.fido.metadata.CertFromBase64Converter + + convert + + (Ljava/lang/String;)Ljava/security/cert/X509Certificate; + + 15 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 15 + + + + + + 4 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::convert + + + + + + CertFromBase64Converter.java + + com.yubico.fido.metadata.CertFromBase64Converter + + getInputType + + (Lcom/fasterxml/jackson/databind/type/TypeFactory;)Lcom/fasterxml/jackson/databind/JavaType; + + 24 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::getInputType + + + + + + CertFromBase64Converter.java + + com.yubico.fido.metadata.CertFromBase64Converter + + getOutputType + + (Lcom/fasterxml/jackson/databind/type/TypeFactory;)Lcom/fasterxml/jackson/databind/JavaType; + + 29 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/fido/metadata/CertFromBase64Converter::getOutputType + + + + + + FidoMetadataDownloaderException.java + + com.yubico.fido.metadata.FidoMetadataDownloaderException + + <init> + + (Lcom/yubico/fido/metadata/FidoMetadataDownloaderException$Reason;)V + + 31 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloaderException.java + + com.yubico.fido.metadata.FidoMetadataDownloaderException + + <init> + + (Lcom/yubico/fido/metadata/FidoMetadataDownloaderException$Reason;Ljava/lang/Throwable;)V + + 25 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 1 + + + + com.yubico.fido.metadata.FidoMetadataDownloaderSpec + + negated conditional + + + + + + FidoMetadataDownloaderException.java + + com.yubico.fido.metadata.FidoMetadataDownloaderException + + getMessage + + ()Ljava/lang/String; + + 37 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with "" for com/yubico/fido/metadata/FidoMetadataDownloaderException::getMessage + + + + + + PatternAccuracyDescriptor.java + + com.yubico.fido.metadata.PatternAccuracyDescriptor + + getBlockSlowdown + + ()Ljava/util/Optional; + + 57 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/PatternAccuracyDescriptor::getBlockSlowdown + + + + + + PatternAccuracyDescriptor.java + + com.yubico.fido.metadata.PatternAccuracyDescriptor + + getMaxRetries + + ()Ljava/util/Optional; + + 48 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/PatternAccuracyDescriptor::getMaxRetries + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1 + + expectLegalHeader + + ([Ljava/lang/String;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2; + + 220 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + FidoMetadataDownloader.java + + com.yubico.fido.metadata.FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1 + + expectLegalHeader + + ([Ljava/lang/String;)Lcom/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step2; + + 221 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 7 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/FidoMetadataDownloader$FidoMetadataDownloaderBuilder$Step1::expectLegalHeader + + + + + + AAID.java + + com.yubico.fido.metadata.AAID + + validate + + (Ljava/lang/String;)Ljava/lang/String; + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + negated conditional + + + + + + AAID.java + + com.yubico.fido.metadata.AAID + + validate + + (Ljava/lang/String;)Ljava/lang/String; + + 67 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 11 + + + + + + 3 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with "" for com/yubico/fido/metadata/AAID::validate + + + + + + CodeAccuracyDescriptor.java + + com.yubico.fido.metadata.CodeAccuracyDescriptor + + getBlockSlowdown + + ()Ljava/util/Optional; + + 53 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/CodeAccuracyDescriptor::getBlockSlowdown + + + + + + CodeAccuracyDescriptor.java + + com.yubico.fido.metadata.CodeAccuracyDescriptor + + getMaxRetries + + ()Ljava/util/Optional; + + 44 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/CodeAccuracyDescriptor::getMaxRetries + + + + + + UnexpectedLegalHeader.java + + com.yubico.fido.metadata.UnexpectedLegalHeader + + getCachedBlob + + ()Ljava/util/Optional; + + 37 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/UnexpectedLegalHeader::getCachedBlob + + + + + + JacksonCodecs.java + + com.yubico.fido.metadata.JacksonCodecs + + jsonWithDefaultEnums + + ()Lcom/fasterxml/jackson/databind/ObjectMapper; + + 9 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.fido.metadata.FidoMds3Spec + + replaced return value with null for com/yubico/fido/metadata/JacksonCodecs::jsonWithDefaultEnums + + + + + + FidoMetadataService.java + + com.yubico.fido.metadata.FidoMetadataService$Filters$AuthenticatorToBeFiltered + + getAaguid + + ()Ljava/util/Optional; + + 449 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/fido/metadata/FidoMetadataService$Filters$AuthenticatorToBeFiltered::getAaguid + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 91 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::getAttestationType + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + lambda$verifyAttestationSignature$0 + + (Lcom/fasterxml/jackson/databind/JsonNode;)Ljava/lang/IllegalArgumentException; + + 119 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::lambda$verifyAttestationSignature$0 + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + lambda$verifyAttestationSignature$1 + + ()Ljava/lang/IllegalArgumentException; + + 132 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier::lambda$verifyAttestationSignature$1 + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + lambda$verifyX5cRequirements$2 + + (Lcom/yubico/webauthn/data/ByteArray;[B)V + + 529 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + validateCertInfo + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestationObject;)V + + 240 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 85 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + validateCertInfo + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestationObject;)V + + 247 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 100 + + + + + + 24 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + validateCertInfo + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestationObject;)V + + 255 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 116 + + + + + + 27 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + validateCertInfo + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestationObject;)V + + 264 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 131 + + + + + + 32 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/webauthn/TpmAttestationStatementVerifier::verifyX5cRequirements + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 15 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 20 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 111 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 56 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 112 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 61 + + + + + + 14 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 122 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 102 + + + + + + 22 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 123 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 107 + + + + + + 24 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 140 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 169 + + + + + + 35 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 174 + + + + + + 37 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 224 + + + + + + 47 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 153 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 229 + + + + + + 49 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 158 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 256 + + + + + + 54 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 159 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 261 + + + + + + 56 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 46 + + + + + + 10 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 111 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 78 + + + + + + 17 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 122 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 124 + + + + + + 27 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 140 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 191 + + + + + + 40 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 246 + + + + + + 52 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 158 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 278 + + + + + + 59 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 180 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 328 + + + + + + 70 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/webauthn/TpmAttestationStatementVerifier::verifyPublicKeysMatch + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 192 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 365 + + + + + + 77 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/webauthn/TpmAttestationStatementVerifier::validateCertInfo + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 197 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 385 + + + + + + 81 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/TpmAttestationStatementVerifier::verifyAttestationSignature + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyPublicKeysMatch + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;)V + + 292 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 82 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyPublicKeysMatch + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;)V + + 338 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 214 + + + + + + 49 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyPublicKeysMatch + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;)V + + 345 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 267 + + + + + + 63 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyPublicKeysMatch + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic;)V + + 350 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 304 + + + + + + 71 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 478 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 491 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 86 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 492 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 93 + + + + + + 22 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 496 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 123 + + + + + + 32 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 497 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 129 + + + + + + 34 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 498 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 143 + + + + + + 37 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 498 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 147 + + + + + + 39 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 499 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 161 + + + + + + 42 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 499 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 165 + + + + + + 44 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 510 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 212 + + + + + + 54 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 510 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 214 + + + + + + 55 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 510 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 216 + + + + + + 56 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 513 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 232 + + + + + + 59 + + + + + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 514 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 246 + + + + + + 62 + + + + + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 515 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 260 + + + + + + 65 + + + + + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 518 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 278 + + + + + + 70 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 518 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 283 + + + + + + 73 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 523 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 311 + + + + + + 79 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 477 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 29 + + + + + + 6 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 482 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 50 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 510 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 271 + + + + + + 68 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 517 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 303 + + + + + + 77 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 522 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 324 + + + + + + 82 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)V + + 527 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 333 + + + + + + 84 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to java/util/Optional::ifPresent + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + ecPublicKeyToRaw + + (Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray; + + 55 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 12 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced double division with multiplication + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + ecPublicKeyToRaw + + (Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray; + + 58 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 39 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer subtraction with addition + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + ecPublicKeyToRaw + + (Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray; + + 59 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 49 + + + + + + 14 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer subtraction with addition + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + ecPublicKeyToRaw + + (Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray; + + 64 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 89 + + + + + + 17 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer subtraction with addition + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + ecPublicKeyToRaw + + (Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray; + + 68 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 108 + + + + + + 19 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer subtraction with addition + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + ecPublicKeyToRaw + + (Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray; + + 61 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 57 + + + + + + 15 + + + + + + removed call to java/util/Arrays::fill + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + ecPublicKeyToRaw + + (Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray; + + 62 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 62 + + + + + + 16 + + + + + + removed call to java/util/Arrays::fill + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + ecPublicKeyToRaw + + (Ljava/security/interfaces/ECPublicKey;)Lcom/yubico/webauthn/data/ByteArray; + + 64 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 122 + + + + + + 23 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::ecPublicKeyToRaw + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + getJavaAlgorithmName + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String; + + 181 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 12 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + getJavaAlgorithmName + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String; + + 183 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 17 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + getJavaAlgorithmName + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String; + + 185 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + getJavaAlgorithmName + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String; + + 187 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 27 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + getJavaAlgorithmName + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String; + + 189 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 32 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + getJavaAlgorithmName + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String; + + 191 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 37 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyTest.defaultSettingsLogWarningIfSomeAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + getJavaAlgorithmName + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String; + + 193 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 42 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyTest.defaultSettingsLogWarningIfSomeAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + getJavaAlgorithmName + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Ljava/lang/String; + + 195 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 47 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::getJavaAlgorithmName + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCoseEd25519PublicKey + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey; + + 169 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 29 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + Replaced integer addition with subtraction + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCoseEd25519PublicKey + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey; + + 169 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 32 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + Replaced integer addition with subtraction + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCoseEd25519PublicKey + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey; + + 171 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 55 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + Replaced integer addition with subtraction + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCoseEd25519PublicKey + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey; + + 175 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 83 + + + + + + 16 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseEd25519PublicKey + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCoseEdDsaPublicKey + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey; + + 159 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 18 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseEdDsaPublicKey + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCoseP256PublicKey + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/security/interfaces/ECPublicKey; + + 151 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseP256PublicKey + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCosePublicKey + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/security/PublicKey; + + 130 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 24 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCosePublicKey + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/security/PublicKey; + + 132 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 30 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCosePublicKey + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/security/PublicKey; + + 135 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 36 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCosePublicKey + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + importCoseRsaPublicKey + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/security/PublicKey; + + 147 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 35 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::importCoseRsaPublicKey + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + jwsAlgorithmNameToJavaAlgorithmName + + (Ljava/lang/String;)Ljava/lang/String; + + 202 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 15 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + jwsAlgorithmNameToJavaAlgorithmName + + (Ljava/lang/String;)Ljava/lang/String; + + 204 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 26 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with "" for com/yubico/webauthn/WebAuthnCodecs::jwsAlgorithmNameToJavaAlgorithmName + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 76 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 16 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer subtraction with addition + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 97 + + + + + + 18 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer subtraction with addition + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 99 + + + + + + 18 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer division with multiplication + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 120 + + + + + + 22 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer subtraction with addition + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 114 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 195 + + + + + + 36 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer addition with subtraction + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 209 + + + + + + 39 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer addition with subtraction + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 213 + + + + + + 39 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer multiplication with division + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 214 + + + + + + 39 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + Replaced integer addition with subtraction + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 22 + + + + + + 1 + + + + + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 2 + + + + + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 3 + + + + + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 33 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 36 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 39 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 42 + + + + + + 7 + + + + + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 86 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 76 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 86 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 79 + + + + + + 14 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 86 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 82 + + + + + + 15 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + WebAuthnCodecs.java + + com.yubico.webauthn.WebAuthnCodecs + + rawEcKeyToCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 119 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 230 + + + + + + 44 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/WebAuthnCodecs::rawEcKeyToCose + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 64 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 65 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 11 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::getAttestationType + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 67 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::getAttestationType + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + getDnField + + (Ljava/lang/String;Ljava/security/cert/X509Certificate;)Ljava/util/Optional; + + 262 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 57 + + + + + + 17 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with Optional.empty for com/yubico/webauthn/PackedAttestationStatementVerifier::getDnField + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$getDnField$5 + + (Ljava/lang/String;Ljavax/naming/ldap/Rdn;)Z + + 263 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$getDnField$5 + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$getDnField$5 + + (Ljava/lang/String;Ljavax/naming/ldap/Rdn;)Z + + 263 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$getDnField$5 + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifySelfAttestationSignature$0 + + (J)Ljava/lang/IllegalArgumentException; + + 124 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifySelfAttestationSignature$0 + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifySelfAttestationSignature$1 + + (J)Ljava/lang/IllegalArgumentException; + + 132 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifySelfAttestationSignature$1 + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cRequirements$6 + + (Ljava/lang/Object;)Z + + 285 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cRequirements$6 + + (Ljava/lang/Object;)Z + + 285 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 4 + + + + + + replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cRequirements$6 + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cRequirements$7 + + (Lcom/yubico/webauthn/data/ByteArray;[B)V + + 297 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$2 + + (Ljava/lang/Long;)Ljava/lang/IllegalArgumentException; + + 200 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$2 + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$3 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 171 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$3 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 176 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 24 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$3 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 188 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 58 + + + + + + 14 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$3 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 228 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 203 + + + + + + 56 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$3 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 229 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 223 + + + + + + 62 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$3 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 192 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 78 + + + + + + 18 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$3 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 215 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 146 + + + + + + 37 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + removed call to java/security/Signature::initVerify + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$3 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 221 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 174 + + + + + + 46 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + removed call to java/security/Signature::update + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$3 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 228 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 234 + + + + + + 66 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced Boolean return with True for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$3 + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + lambda$verifyX5cSignature$4 + + ()Ljava/lang/IllegalArgumentException; + + 247 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/webauthn/PackedAttestationStatementVerifier::lambda$verifyX5cSignature$4 + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 76 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 76 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 80 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 30 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 37 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 83 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 45 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 37 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 83 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 45 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyAttestationSignature + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifySelfAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 135 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 135 + + + + + + 31 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifySelfAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 202 + + + + + + 46 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifySelfAttestationSignature + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifySelfAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 202 + + + + + + 46 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifySelfAttestationSignature + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z + + 269 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z + + 303 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 137 + + + + + + 29 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z + + 279 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 72 + + + + + + 16 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z + + 284 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 89 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z + + 288 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 120 + + + + + + 25 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z + + 295 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 129 + + + + + + 27 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to java/util/Optional::ifPresent + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z + + 302 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 150 + + + + + + 32 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cRequirements + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;)Z + + 305 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 154 + + + + + + 33 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cRequirements + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 167 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 51 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with false for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cSignature + + + + + + PackedAttestationStatementVerifier.java + + com.yubico.webauthn.PackedAttestationStatementVerifier + + verifyX5cSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 167 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 51 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/PackedAttestationStatementVerifier::verifyX5cSignature + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + <init> + + (Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)V + + 102 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + fromJson + + (Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)Lcom/yubico/webauthn/RegistrationResult; + + 112 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.JsonIoSpec + + negated conditional + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + fromJson + + (Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)Lcom/yubico/webauthn/RegistrationResult; + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.data.JsonIoSpec + + negated conditional + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + fromJson + + (Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)Lcom/yubico/webauthn/RegistrationResult; + + 117 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 24 + + + + + + 6 + + + + com.yubico.webauthn.data.JsonIoSpec + + negated conditional + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + fromJson + + (Lcom/yubico/webauthn/data/PublicKeyCredential;ZLcom/yubico/webauthn/data/AttestationType;Ljava/util/Optional;)Lcom/yubico/webauthn/RegistrationResult; + + 118 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 46 + + + + + + 11 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with null for com/yubico/webauthn/RegistrationResult::fromJson + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getAaguid + + ()Lcom/yubico/webauthn/data/ByteArray; + + 265 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 27 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/RegistrationResult::getAaguid + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getAttestationTrustPath + + ()Ljava/util/Optional; + + 388 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAttestationTrustPath + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getAttestationTrustPathJson + + ()Ljava/util/Optional; + + 393 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAttestationTrustPathJson + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getAuthenticatorAttachment + + ()Ljava/util/Optional; + + 217 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAuthenticatorAttachment + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getAuthenticatorExtensionOutputs + + ()Ljava/util/Optional; + + 340 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 13 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getAuthenticatorExtensionOutputs + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getClientExtensionOutputs + + ()Ljava/util/Optional; + + 321 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::getClientExtensionOutputs + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getKeyId + + ()Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor; + + 248 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 29 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/RegistrationResult::getKeyId + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getParsedPublicKey + + ()Ljava/security/PublicKey; + + 303 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/webauthn/RegistrationResult::getParsedPublicKey + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getPublicKeyCose + + ()Lcom/yubico/webauthn/data/ByteArray; + + 284 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 27 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/RegistrationResult::getPublicKeyCose + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + getSignatureCount + + ()J + + 230 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced long return with 0 for com/yubico/webauthn/RegistrationResult::getSignatureCount + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + isBackedUp + + ()Z + + 203 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/RegistrationResult::isBackedUp + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + isBackedUp + + ()Z + + 203 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/RegistrationResult::isBackedUp + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + isBackupEligible + + ()Z + + 178 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/RegistrationResult::isBackupEligible + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + isBackupEligible + + ()Z + + 178 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/RegistrationResult::isBackupEligible + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + isDiscoverable + + ()Ljava/util/Optional; + + 366 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 15 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::isDiscoverable + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + isUserVerified + + ()Z + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/RegistrationResult::isUserVerified + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + isUserVerified + + ()Z + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/RegistrationResult::isUserVerified + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + lambda$fromJson$0 + + (Ljava/lang/String;)Ljava/security/cert/X509Certificate; + + 128 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with null for com/yubico/webauthn/RegistrationResult::lambda$fromJson$0 + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + lambda$fromJson$1 + + (Ljava/util/List;)Ljava/util/List; + + 133 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 16 + + + + + + 4 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with Collections.emptyList for com/yubico/webauthn/RegistrationResult::lambda$fromJson$1 + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + lambda$getAttestationTrustPathJson$5 + + (Ljava/security/cert/X509Certificate;)Ljava/lang/String; + + 400 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with "" for com/yubico/webauthn/RegistrationResult::lambda$getAttestationTrustPathJson$5 + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + lambda$getAttestationTrustPathJson$6 + + (Ljava/util/List;)Ljava/util/List; + + 405 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 16 + + + + + + 4 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with Collections.emptyList for com/yubico/webauthn/RegistrationResult::lambda$getAttestationTrustPathJson$6 + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + lambda$getClientExtensionOutputs$2 + + (Lcom/yubico/webauthn/data/ClientRegistrationExtensionOutputs;)Z + + 322 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + lambda$getClientExtensionOutputs$2 + + (Lcom/yubico/webauthn/data/ClientRegistrationExtensionOutputs;)Z + + 322 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 5 + + + + + + replaced boolean return with true for com/yubico/webauthn/RegistrationResult::lambda$getClientExtensionOutputs$2 + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + lambda$isDiscoverable$3 + + (Lcom/yubico/webauthn/data/ClientRegistrationExtensionOutputs;)Ljava/util/Optional; + + 367 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::lambda$isDiscoverable$3 + + + + + + RegistrationResult.java + + com.yubico.webauthn.RegistrationResult + + lambda$isDiscoverable$4 + + (Lcom/yubico/webauthn/data/Extensions$CredentialProperties$CredentialPropertiesOutput;)Ljava/util/Optional; + + 368 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegistrationResult::lambda$isDiscoverable$4 + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 366 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 368 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 369 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 370 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 38 + + + + + + 10 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 371 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 48 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 380 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 66 + + + + + + 16 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + _finishAssertion + + (Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/FinishAssertionSteps; + + 576 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty::_finishAssertion + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + _finishRegistration + + (Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/FinishRegistrationSteps; + + 518 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty::_finishRegistration + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + builder + + ()Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages; + + 580 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/RelyingParty::builder + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + filterAvailableAlgorithms + + (Ljava/util/List;)Ljava/util/List; + + 420 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyTest.logsWarningIfAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingParty::filterAvailableAlgorithms + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + finishAssertion + + (Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/AssertionResult; + + 562 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty::finishAssertion + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + finishRegistration + + (Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/RegistrationResult; + + 504 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty::finishRegistration + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + generateChallenge + + ()Lcom/yubico/webauthn/data/ByteArray; + + 408 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 10 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + removed call to java/security/SecureRandom::nextBytes + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + generateChallenge + + ()Lcom/yubico/webauthn/data/ByteArray; + + 409 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/RelyingParty::generateChallenge + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + lambda$filterAvailableAlgorithms$0 + + (Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z + + 471 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 128 + + + + + + 26 + + + + com.yubico.webauthn.RelyingPartyTest.defaultSettingsLogWarningIfSomeAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced boolean return with false for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + lambda$filterAvailableAlgorithms$0 + + (Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z + + 451 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 70 + + + + + + 14 + + + + com.yubico.webauthn.RelyingPartyTest.logsWarningIfAlgorithmNotAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + lambda$filterAvailableAlgorithms$0 + + (Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z + + 459 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 95 + + + + + + 20 + + + + + + replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + lambda$filterAvailableAlgorithms$0 + + (Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z + + 468 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 123 + + + + + + 25 + + + + + + replaced boolean return with true for com/yubico/webauthn/RelyingParty::lambda$filterAvailableAlgorithms$0 + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + lambda$startAssertion$1 + + (Lcom/yubico/webauthn/StartAssertionOptions;)Ljava/util/Optional; + + 530 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 18 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RelyingParty::lambda$startAssertion$1 + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + lambda$startAssertion$2 + + (Ljava/lang/String;)Ljava/util/List; + + 535 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 10 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingParty::lambda$startAssertion$2 + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + startAssertion + + (Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest; + + 542 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 64 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + removed call to java/util/Optional::ifPresent + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + startAssertion + + (Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest; + + 544 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 88 + + + + + + 29 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty::startAssertion + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + startRegistration + + (Lcom/yubico/webauthn/StartRegistrationOptions;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions; + + 497 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 80 + + + + + + 23 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + removed call to java/util/Optional::ifPresent + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty + + startRegistration + + (Lcom/yubico/webauthn/StartRegistrationOptions;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions; + + 498 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 85 + + + + + + 25 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/RelyingParty::startRegistration + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + <init> + + ([B)V + + 54 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ByteArrayTest.testEncodeBase64Url(com.yubico.webauthn.data.ByteArrayTest) + + negated conditional + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + compareTo + + (Lcom/yubico/webauthn/data/ByteArray;)I + + 147 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 31 + + + + + + 3 + + + + com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest) + + changed conditional boundary + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + compareTo + + (Lcom/yubico/webauthn/data/ByteArray;)I + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 18 + + + + + + 1 + + + + com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest) + + Replaced integer subtraction with addition + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + compareTo + + (Lcom/yubico/webauthn/data/ByteArray;)I + + 149 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 53 + + + + + + 5 + + + + com.yubico.webauthn.data.BuildersSpec + + Replaced integer subtraction with addition + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + compareTo + + (Lcom/yubico/webauthn/data/ByteArray;)I + + 143 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest) + + negated conditional + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + compareTo + + (Lcom/yubico/webauthn/data/ByteArray;)I + + 147 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 31 + + + + + + 3 + + + + com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest) + + negated conditional + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + compareTo + + (Lcom/yubico/webauthn/data/ByteArray;)I + + 148 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 42 + + + + + + 4 + + + + com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest) + + negated conditional + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + compareTo + + (Lcom/yubico/webauthn/data/ByteArray;)I + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 19 + + + + + + 1 + + + + com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest) + + replaced int return with 0 for com/yubico/webauthn/data/ByteArray::compareTo + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + compareTo + + (Lcom/yubico/webauthn/data/ByteArray;)I + + 149 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 54 + + + + + + 5 + + + + com.yubico.webauthn.data.ByteArrayTest.sortTest(com.yubico.webauthn.data.ByteArrayTest) + + replaced int return with 0 for com/yubico/webauthn/data/ByteArray::compareTo + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + concat + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 100 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + concat + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 101 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 29 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/ByteArray::concat + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + fromBase64 + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 69 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.ByteArrayTest.codecMimeTest(com.yubico.webauthn.data.ByteArrayTest) + + negated conditional + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + fromBase64 + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 70 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.data.ByteArrayTest.codecMimeTest(com.yubico.webauthn.data.ByteArrayTest) + + replaced return value with null for com/yubico/webauthn/data/ByteArray::fromBase64 + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + fromBase64Url + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 79 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.ByteArrayTest.decodeBadAlphabetTest(com.yubico.webauthn.data.ByteArrayTest) + + negated conditional + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + fromBase64Url + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 80 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 5 + + + + com.yubico.webauthn.data.ByteArrayTest.decodeTest(com.yubico.webauthn.data.ByteArrayTest) + + replaced return value with null for com/yubico/webauthn/data/ByteArray::fromBase64Url + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + fromHex + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 88 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.ByteArrayTest.decodeBadHexLengthTest(com.yubico.webauthn.data.ByteArrayTest) + + negated conditional + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + fromHex + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 90 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest) + + replaced return value with null for com/yubico/webauthn/data/ByteArray::fromHex + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + getBase64 + + ()Ljava/lang/String; + + 123 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.ByteArrayTest.codecMimeTest(com.yubico.webauthn.data.ByteArrayTest) + + replaced return value with "" for com/yubico/webauthn/data/ByteArray::getBase64 + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + getBase64Url + + ()Ljava/lang/String; + + 130 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.data.ByteArrayTest.testEncodeBase64Url(com.yubico.webauthn.data.ByteArrayTest) + + replaced return value with "" for com/yubico/webauthn/data/ByteArray::getBase64Url + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + getBytes + + ()[B + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ByteArrayTest.decodeTest(com.yubico.webauthn.data.ByteArrayTest) + + replaced return value with null for com/yubico/webauthn/data/ByteArray::getBytes + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + getHex + + ()Ljava/lang/String; + + 138 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + replaced return value with "" for com/yubico/webauthn/data/ByteArray::getHex + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + isEmpty + + ()Z + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest) + + negated conditional + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + isEmpty + + ()Z + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 13 + + + + + + 4 + + + + com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest) + + replaced boolean return with true for com/yubico/webauthn/data/ByteArray::isEmpty + + + + + + ByteArray.java + + com.yubico.webauthn.data.ByteArray + + size + + ()I + + 109 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 6 + + + + + + 0 + + + + com.yubico.webauthn.data.ByteArrayTest.isEmptyTest(com.yubico.webauthn.data.ByteArrayTest) + + replaced int return with 0 for com/yubico/webauthn/data/ByteArray::size + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 564 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 564 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 566 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 17 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 566 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 24 + + + + + + 10 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 581 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 103 + + + + + + 33 + + + + + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 609 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 215 + + + + + + 60 + + + + + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 578 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 82 + + + + + + 26 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to java/security/cert/PKIXParameters::setDate + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 579 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 91 + + + + + + 29 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to java/security/cert/PKIXParameters::setRevocationEnabled + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 580 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 112 + + + + + + 36 + + + + + + removed call to java/security/cert/PKIXParameters::setPolicyQualifiersRejected + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 582 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 125 + + + + + + 40 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to java/util/Optional::ifPresent + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 585 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 162 + + + + + + 48 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 567 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 30 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 585 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 162 + + + + + + 48 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 615 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 235 + + + + + + 65 + + + + + + replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 622 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 259 + + + + + + 71 + + + + + + replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + attestationTrusted + + ()Z + + 635 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 288 + + + + + + 76 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step21::attestationTrusted + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + lambda$attestationTrusted$0 + + (Ljava/security/cert/X509Certificate;)Ljava/security/cert/TrustAnchor; + + 576 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$0 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + lambda$attestationTrusted$1 + + (Ljava/security/cert/PKIXCertPathValidatorResult;Ljava/util/function/Predicate;)Ljava/lang/Boolean; + + 590 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + lambda$attestationTrusted$1 + + (Ljava/security/cert/PKIXCertPathValidatorResult;Ljava/util/function/Predicate;)Ljava/lang/Boolean; + + 591 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 12 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced Boolean return with False for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$1 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + lambda$attestationTrusted$1 + + (Ljava/security/cert/PKIXCertPathValidatorResult;Ljava/util/function/Predicate;)Ljava/lang/Boolean; + + 596 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 33 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced Boolean return with True for com/yubico/webauthn/FinishRegistrationSteps$Step21::lambda$attestationTrusted$1 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step22; + + 560 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step21::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + validate + + ()V + + 554 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + validate + + ()V + + 554 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step21 + + validate + + ()V + + 553 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 26 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getAppidExclude + + ()Ljava/util/Optional; + + 97 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/RegistrationExtensionInputs::getAppidExclude + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getCredProps + + ()Z + + 109 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getCredProps + + ()Z + + 109 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getCredProps + + ()Z + + 109 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced boolean return with true for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredProps + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getCredPropsJson + + ()Ljava/lang/Boolean; + + 115 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getCredPropsJson + + ()Ljava/lang/Boolean; + + 115 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 14 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced Boolean return with False for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredPropsJson + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getCredPropsJson + + ()Ljava/lang/Boolean; + + 115 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced Boolean return with True for com/yubico/webauthn/data/RegistrationExtensionInputs::getCredPropsJson + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getExtensionIds + + ()Ljava/util/Set; + + 158 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getExtensionIds + + ()Ljava/util/Set; + + 161 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 23 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getExtensionIds + + ()Ljava/util/Set; + + 164 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 35 + + + + + + 8 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getExtensionIds + + ()Ljava/util/Set; + + 167 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 47 + + + + + + 12 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getExtensionIds + + ()Ljava/util/Set; + + 170 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 59 + + + + + + 16 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Collections.emptySet for com/yubico/webauthn/data/RegistrationExtensionInputs::getExtensionIds + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getLargeBlob + + ()Ljava/util/Optional; + + 130 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/RegistrationExtensionInputs::getLargeBlob + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getUvm + + ()Z + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getUvm + + ()Z + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getUvm + + ()Z + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced boolean return with true for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvm + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getUvmJson + + ()Ljava/lang/Boolean; + + 147 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getUvmJson + + ()Ljava/lang/Boolean; + + 147 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 14 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced Boolean return with False for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvmJson + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + getUvmJson + + ()Ljava/lang/Boolean; + + 147 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced Boolean return with True for com/yubico/webauthn/data/RegistrationExtensionInputs::getUvmJson + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + merge + + (Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs; + + 82 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + merge + + (Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs; + + 83 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 22 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + merge + + (Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs; + + 84 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 35 + + + + + + 6 + + + + + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + merge + + (Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs; + + 85 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 48 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs + + merge + + (Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs; + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 61 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs::merge + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + <init> + + (Lcom/yubico/webauthn/FinishAssertionSteps;)V + + 214 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 61 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + <init> + + (Lcom/yubico/webauthn/FinishAssertionSteps;)V + + 214 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 65 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + lambda$new$0 + + (Lcom/yubico/webauthn/UsernameRepository;)Ljava/util/Optional; + + 205 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$0 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + lambda$new$1 + + ()Ljava/util/Optional; + + 204 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$1 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + lambda$new$2 + + (Lcom/yubico/webauthn/FinishAssertionSteps;Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 211 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$2 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + lambda$new$3 + + ()Ljava/util/Optional; + + 211 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$3 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + lambda$new$4 + + (Lcom/yubico/webauthn/FinishAssertionSteps;Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 220 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$4 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + lambda$new$5 + + ()Ljava/util/Optional; + + 220 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$5 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + lambda$new$6 + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 223 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 12 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Step6::lambda$new$6 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step7; + + 228 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step6::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 234 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 234 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 15 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 241 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 49 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 241 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 53 + + + + + + 15 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 249 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 93 + + + + + + 22 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 249 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 97 + + + + + + 24 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 266 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 200 + + + + + + 46 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 233 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 30 + + + + + + 9 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 237 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 43 + + + + + + 11 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 242 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 87 + + + + + + 21 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 250 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 139 + + + + + + 31 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 258 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 156 + + + + + + 35 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 260 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 193 + + + + + + 43 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step6 + + validate + + ()V + + 267 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 221 + + + + + + 49 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + getAttestationCertificate + + (Lcom/yubico/webauthn/data/AttestationObject;)Ljava/security/cert/X509Certificate; + + 52 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationCertificate + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 108 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 12 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 109 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 17 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 111 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 33 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 114 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 37 + + + + + + 10 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationType + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 42 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getAttestationType + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + getRawUserPublicKey + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/ByteArray; + + 100 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 76 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::getRawUserPublicKey + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + lambda$getAttestationCertificate$0 + + (Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate; + + 55 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + lambda$getAttestationCertificate$0 + + (Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate; + + 56 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 16 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + lambda$getAttestationCertificate$0 + + (Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate; + + 57 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 20 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$getAttestationCertificate$0 + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + lambda$getAttestationCertificate$1 + + ()Ljava/lang/IllegalArgumentException; + + 65 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$getAttestationCertificate$1 + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + lambda$verifyAttestationSignature$2 + + (Lcom/yubico/webauthn/data/AttestationObject;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestedCredentialData;)Ljava/lang/Boolean; + + 146 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + lambda$verifyAttestationSignature$2 + + (Lcom/yubico/webauthn/data/AttestationObject;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestedCredentialData;)Ljava/lang/Boolean; + + 151 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 24 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + lambda$verifyAttestationSignature$2 + + (Lcom/yubico/webauthn/data/AttestationObject;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestedCredentialData;)Ljava/lang/Boolean; + + 185 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 127 + + + + + + 27 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced Boolean return with False for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$2 + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + lambda$verifyAttestationSignature$2 + + (Lcom/yubico/webauthn/data/AttestationObject;Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AttestedCredentialData;)Ljava/lang/Boolean; + + 185 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 127 + + + + + + 27 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced Boolean return with True for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$2 + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + lambda$verifyAttestationSignature$3 + + ()Ljava/lang/IllegalArgumentException; + + 194 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::lambda$verifyAttestationSignature$3 + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + validSelfSignature + + (Ljava/security/cert/X509Certificate;)Z + + 71 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 6 + + + + + + 1 + + + + + + removed call to java/security/cert/X509Certificate::verify + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + validSelfSignature + + (Ljava/security/cert/X509Certificate;)Z + + 72 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::validSelfSignature + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + validSelfSignature + + (Ljava/security/cert/X509Certificate;)Z + + 74 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 19 + + + + + + 3 + + + + + + replaced boolean return with true for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::validSelfSignature + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 132 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 38 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 133 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 46 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 82 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with false for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::verifyAttestationSignature + + + + + + FidoU2fAttestationStatementVerifier.java + + com.yubico.webauthn.FidoU2fAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 82 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/FidoU2fAttestationStatementVerifier::verifyAttestationSignature + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 20 + + + + + + 5 + + + + com.yubico.webauthn.data.AttestationObjectSpec + + changed conditional boundary + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 102 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 20 + + + + + + 5 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 117 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 88 + + + + + + 16 + + + + com.yubico.webauthn.data.AttestationObjectSpec + + negated conditional + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 123 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 124 + + + + + + 22 + + + + com.yubico.webauthn.data.AttestationObjectSpec + + negated conditional + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 103 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 62 + + + + + + 13 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + getAttestedCredentialData + + ()Ljava/util/Optional; + + 246 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorData::getAttestedCredentialData + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + getExtensions + + ()Ljava/util/Optional; + + 259 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorData::getExtensions + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + getRpIdHash + + ()Lcom/yubico/webauthn/data/ByteArray; + + 137 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorData::getRpIdHash + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + getSignatureCounter + + ()J + + 142 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + replaced long return with 0 for com/yubico/webauthn/data/AuthenticatorData::getSignatureCounter + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 153 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 22 + + + + + + 0 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + changed conditional boundary + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 177 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 127 + + + + + + 17 + + + + + + changed conditional boundary + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 192 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 184 + + + + + + 28 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + changed conditional boundary + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 172 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 111 + + + + + + 17 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + Replaced integer addition with subtraction + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 153 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 22 + + + + + + 0 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 177 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 127 + + + + + + 17 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 192 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 184 + + + + + + 28 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 193 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 189 + + + + + + 29 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + negated conditional + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 206 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 236 + + + + + + 39 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 153 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 57 + + + + + + 6 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 177 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 162 + + + + + + 23 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseAttestedCredentialData + + (Lcom/yubico/webauthn/data/AuthenticatorDataFlags;[B)Lcom/yubico/webauthn/data/AuthenticatorData$VariableLengthParseResult; + + 214 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 294 + + + + + + 55 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorData::parseAttestedCredentialData + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData + + parseExtensions + + ([B)Lcom/upokecenter/cbor/CBORObject; + + 226 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorData::parseExtensions + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 372 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 374 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 376 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 377 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 38 + + + + + + 10 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 378 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 48 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Ljava/util/Set;Lcom/yubico/webauthn/CredentialRepositoryV2;Lcom/yubico/webauthn/UsernameRepository;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/List;ZZZZLjava/time/Clock;)V + + 387 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 66 + + + + + + 16 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + _finishAssertion + + (Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/FinishAssertionSteps; + + 548 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2::_finishAssertion + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + _finishRegistration + + (Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/FinishRegistrationSteps; + + 477 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2::_finishRegistration + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + builder + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/CredentialRepositoryV2;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 553 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2::builder + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + filterAvailableAlgorithms + + (Ljava/util/List;)Ljava/util/List; + + 428 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingPartyV2::filterAvailableAlgorithms + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + finishAssertion + + (Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/AssertionResultV2; + + 534 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2::finishAssertion + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + finishRegistration + + (Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/RegistrationResult; + + 463 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2::finishRegistration + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + generateChallenge + + ()Lcom/yubico/webauthn/data/ByteArray; + + 416 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 10 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + removed call to java/security/SecureRandom::nextBytes + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + generateChallenge + + ()Lcom/yubico/webauthn/data/ByteArray; + + 417 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2::generateChallenge + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + lambda$startAssertion$0 + + (Lcom/yubico/webauthn/StartAssertionOptions;Lcom/yubico/webauthn/UsernameRepository;)Ljava/util/Optional; + + 497 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 17 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$0 + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + lambda$startAssertion$1 + + (Lcom/yubico/webauthn/StartAssertionOptions;)Ljava/util/Optional; + + 494 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 13 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$1 + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + lambda$startAssertion$2 + + (Ljava/util/Set;)Ljava/util/List; + + 507 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 16 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Collections.emptyList for com/yubico/webauthn/RelyingPartyV2::lambda$startAssertion$2 + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + startAssertion + + (Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest; + + 481 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + startAssertion + + (Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest; + + 481 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + startAssertion + + (Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest; + + 514 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 89 + + + + + + 28 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to java/util/Optional::ifPresent + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + startAssertion + + (Lcom/yubico/webauthn/StartAssertionOptions;)Lcom/yubico/webauthn/AssertionRequest; + + 516 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 113 + + + + + + 37 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2::startAssertion + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + startRegistration + + (Lcom/yubico/webauthn/StartRegistrationOptions;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions; + + 456 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 92 + + + + + + 27 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + removed call to java/util/Optional::ifPresent + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2 + + startRegistration + + (Lcom/yubico/webauthn/StartRegistrationOptions;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions; + + 457 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 97 + + + + + + 29 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2::startRegistration + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isAllowed + + (Ljava/lang/String;Ljava/util/Set;ZZ)Z + + 26 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 69 + + + + + + 9 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with false for com/yubico/webauthn/OriginMatcher::isAllowed + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isAllowed + + (Ljava/lang/String;Ljava/util/Set;ZZ)Z + + 26 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 69 + + + + + + 9 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isAllowed + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isDomainAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 68 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isDomainAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 69 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 20 + + + + + + 4 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isDomainAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 69 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 31 + + + + + + 10 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isDomainAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 71 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 48 + + + + + + 15 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with false for com/yubico/webauthn/OriginMatcher::isDomainAccepted + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isDomainAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 69 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 41 + + + + + + 13 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isDomainAccepted + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isDomainAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 71 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 48 + + + + + + 15 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isDomainAccepted + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isPortAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 57 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isPortAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 60 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 16 + + + + + + 4 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isPortAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 58 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with false for com/yubico/webauthn/OriginMatcher::isPortAccepted + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + isPortAccepted + + (ZLjava/net/URL;Ljava/net/URL;)Z + + 60 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 24 + + + + + + 7 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with true for com/yubico/webauthn/OriginMatcher::isPortAccepted + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 29 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 32 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 32 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 24 + + + + + + 5 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 32 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 26 + + + + + + 6 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 48 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 81 + + + + + + 16 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 48 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 83 + + + + + + 17 + + + + com.yubico.webauthn.OriginMatcherSpec + + negated conditional + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 31 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 17 + + + + + + 3 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with false for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 40 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 51 + + + + + + 10 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 48 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 91 + + + + + + 20 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 + + + + + + OriginMatcher.java + + com.yubico.webauthn.OriginMatcher + + lambda$isAllowed$0 + + (Ljava/lang/String;Ljava/net/URL;ZZLjava/lang/String;)Z + + 51 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 103 + + + + + + 22 + + + + com.yubico.webauthn.OriginMatcherSpec + + replaced boolean return with true for com/yubico/webauthn/OriginMatcher::lambda$isAllowed$0 + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + <init> + + (Lcom/yubico/webauthn/extension/appid/AppId;Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;Ljava/lang/Boolean;)V + + 67 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 19 + + + + + + 1 + + + + com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest) + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + <init> + + (Lcom/yubico/webauthn/extension/appid/AppId;Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;Ljava/lang/Boolean;)V + + 67 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 22 + + + + + + 3 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getAppid + + ()Ljava/util/Optional; + + 210 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AssertionExtensionInputs::getAppid + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getExtensionIds + + ()Ljava/util/Set; + + 92 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getExtensionIds + + ()Ljava/util/Set; + + 95 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 23 + + + + + + 4 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getExtensionIds + + ()Ljava/util/Set; + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 35 + + + + + + 8 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getExtensionIds + + ()Ljava/util/Set; + + 101 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 46 + + + + + + 11 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Collections.emptySet for com/yubico/webauthn/data/AssertionExtensionInputs::getExtensionIds + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getLargeBlob + + ()Ljava/util/Optional; + + 225 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AssertionExtensionInputs::getLargeBlob + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getLargeBlobJson + + ()Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput; + + 231 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getLargeBlobJson + + ()Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput; + + 231 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getLargeBlobJson + + ()Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput; + + 231 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getUvm + + ()Z + + 244 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.data.AuthenticatorDataSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getUvm + + ()Z + + 244 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getUvm + + ()Z + + 244 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced boolean return with true for com/yubico/webauthn/data/AssertionExtensionInputs::getUvm + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getUvmJson + + ()Ljava/lang/Boolean; + + 250 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getUvmJson + + ()Ljava/lang/Boolean; + + 250 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 14 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced Boolean return with False for com/yubico/webauthn/data/AssertionExtensionInputs::getUvmJson + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + getUvmJson + + ()Ljava/lang/Boolean; + + 250 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced Boolean return with True for com/yubico/webauthn/data/AssertionExtensionInputs::getUvmJson + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + merge + + (Lcom/yubico/webauthn/data/AssertionExtensionInputs;)Lcom/yubico/webauthn/data/AssertionExtensionInputs; + + 79 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + merge + + (Lcom/yubico/webauthn/data/AssertionExtensionInputs;)Lcom/yubico/webauthn/data/AssertionExtensionInputs; + + 80 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 22 + + + + + + 3 + + + + + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + merge + + (Lcom/yubico/webauthn/data/AssertionExtensionInputs;)Lcom/yubico/webauthn/data/AssertionExtensionInputs; + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 35 + + + + + + 6 + + + + + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs + + merge + + (Lcom/yubico/webauthn/data/AssertionExtensionInputs;)Lcom/yubico/webauthn/data/AssertionExtensionInputs; + + 78 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 48 + + + + + + 10 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs::merge + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 37 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getAttestationType + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + getResponseBytes + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/ByteArray; + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + getResponseBytes + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/ByteArray; + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + getResponseBytes + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/ByteArray; + + 101 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 39 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getResponseBytes + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + getX5cArray + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/fasterxml/jackson/databind/JsonNode; + + 47 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 46 + + + + + + 15 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::getX5cArray + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + parseJws + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom; + + 88 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::parseJws + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 55 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 55 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 63 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 41 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 73 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 101 + + + + + + 26 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 79 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 123 + + + + + + 30 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 84 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 127 + + + + + + 31 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyAttestationSignature + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 64 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 45 + + + + + + 14 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyAttestationSignature + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyHostname + + (Ljava/security/cert/X509Certificate;)Z + + 193 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 6 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to org/apache/hc/client5/http/ssl/DefaultHostnameVerifier::verify + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyHostname + + (Ljava/security/cert/X509Certificate;)Z + + 194 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 11 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyHostname + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifyHostname + + (Ljava/security/cert/X509Certificate;)Z + + 196 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 19 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifyHostname + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifySignature + + (Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z + + 123 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 49 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to java/security/Signature::initVerify + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifySignature + + (Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z + + 129 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 78 + + + + + + 23 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to java/security/Signature::update + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifySignature + + (Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z + + 136 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 116 + + + + + + 32 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifySignature + + (Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z + + 142 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 125 + + + + + + 36 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifySignature + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier + + verifySignature + + (Lcom/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom;)Z + + 142 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 125 + + + + + + 36 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier::verifySignature + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + <init> + + (Lcom/yubico/webauthn/data/PublicKeyCredentialType;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V + + 74 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + <init> + + (Lcom/yubico/webauthn/data/PublicKeyCredentialType;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V + + 75 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + <init> + + (Lcom/yubico/webauthn/data/PublicKeyCredentialType;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V + + 80 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 41 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + builder + + ()Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder$MandatoryStages; + + 110 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::builder + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 86 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 90 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 40 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 44 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 96 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 55 + + + + + + 16 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 96 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 59 + + + + + + 19 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 70 + + + + + + 23 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 74 + + + + + + 26 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 101 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 92 + + + + + + 32 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 16 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 91 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 33 + + + + + + 6 + + + + + + replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 95 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 48 + + + + + + 13 + + + + + + replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 97 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 63 + + + + + + 20 + + + + + + replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + compareTo + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)I + + 102 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 96 + + + + + + 33 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced int return with 0 for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::compareTo + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + getTransports + + ()Ljava/util/Optional; + + 168 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::getTransports + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor + + toPublicKeyCredentialDescriptor + + ()Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor; + + 122 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor::toPublicKeyCredentialDescriptor + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + lambda$parseAuthenticatorExtensionOutput$0 + + (Lcom/upokecenter/cbor/CBORObject;)Lcom/yubico/webauthn/data/Extensions$Uvm$UvmEntry; + + 482 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 35 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with null for com/yubico/webauthn/data/Extensions$Uvm::lambda$parseAuthenticatorExtensionOutput$0 + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + parseAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional; + + 477 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + parseAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional; + + 478 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 27 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$Uvm::parseAuthenticatorExtensionOutput + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 508 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 46 + + + + + + 11 + + + + + + changed conditional boundary + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 508 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 50 + + + + + + 13 + + + + + + changed conditional boundary + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 495 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 500 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 23 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 508 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 46 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 508 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 50 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 517 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 90 + + + + + + 26 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 522 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 108 + + + + + + 32 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 528 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 141 + + + + + + 45 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 528 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 145 + + + + + + 48 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 535 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 170 + + + + + + 55 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with false for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 496 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 2 + + + + + + replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 505 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 39 + + + + + + 9 + + + + + + replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 513 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 68 + + + + + + 18 + + + + + + replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 519 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 101 + + + + + + 30 + + + + + + replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 524 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 120 + + + + + + 37 + + + + + + replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$Uvm + + validateAuthenticatorExtensionOutput + + (Lcom/upokecenter/cbor/CBORObject;)Z + + 530 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 157 + + + + + + 52 + + + + + + replaced boolean return with true for com/yubico/webauthn/data/Extensions$Uvm::validateAuthenticatorExtensionOutput + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + timeout + + (J)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 363 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 3 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + timeout + + (Ljava/lang/Long;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 371 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 345 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 22 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + changed conditional boundary + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 344 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + negated conditional + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 345 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 15 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 345 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 22 + + + + + + 7 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + negated conditional + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 349 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 50 + + + + + + 16 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::timeout + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + userHandle + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 298 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userHandle + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + userHandle + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 263 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + userHandle + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 265 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 23 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + userHandle + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 268 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 33 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userHandle + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + userVerification + + (Lcom/yubico/webauthn/data/UserVerificationRequirement;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 331 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userVerification + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + userVerification + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 313 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + negated conditional + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + userVerification + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 315 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::userVerification + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + username + + (Ljava/lang/String;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 232 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::username + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + username + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 197 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + negated conditional + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + username + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 199 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 23 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions$StartAssertionOptionsBuilder + + username + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder; + + 202 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 33 + + + + + + 7 + + + + com.yubico.webauthn.StartAssertionOptionsTest.itHasTheseBuilderMethods(com.yubico.webauthn.StartAssertionOptionsTest) + + replaced return value with null for com/yubico/webauthn/StartAssertionOptions$StartAssertionOptionsBuilder::username + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V + + 133 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V + + 134 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V + + 135 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V + + 136 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 38 + + + + + + 10 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V + + 149 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 77 + + + + + + 14 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V + + 153 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 102 + + + + + + 18 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + <init> + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;Lcom/yubico/webauthn/data/UserIdentity;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/List;Ljava/lang/Long;Ljava/util/Set;Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;Lcom/yubico/webauthn/data/AttestationConveyancePreference;Lcom/yubico/webauthn/data/RegistrationExtensionInputs;)V + + 155 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 117 + + + + + + 21 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + builder + + ()Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages; + + 232 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::builder + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + filterAvailableAlgorithms + + (Ljava/util/List;)Ljava/util/List; + + 368 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + replaced return value with Collections.emptyList for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::filterAvailableAlgorithms + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + fromJson + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions; + + 216 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::fromJson + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + getAuthenticatorSelection + + ()Ljava/util/Optional; + + 228 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getAuthenticatorSelection + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + getExcludeCredentials + + ()Ljava/util/Optional; + + 224 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getExcludeCredentials + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + getTimeout + + ()Ljava/util/Optional; + + 220 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::getTimeout + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + lambda$filterAvailableAlgorithms$0 + + (Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z + + 447 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 191 + + + + + + 40 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + replaced boolean return with false for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + lambda$filterAvailableAlgorithms$0 + + (Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z + + 399 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 70 + + + + + + 14 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + lambda$filterAvailableAlgorithms$0 + + (Lcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z + + 444 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 186 + + + + + + 39 + + + + + + replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::lambda$filterAvailableAlgorithms$0 + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + toCredentialsCreateJson + + ()Ljava/lang/String; + + 179 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 24 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::toCredentialsCreateJson + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions + + toJson + + ()Ljava/lang/String; + + 199 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions::toJson + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + <init> + + (ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/RegisteredCredential;Ljava/lang/String;Z)V + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + <init> + + (ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/RegisteredCredential;Ljava/lang/String;Z)V + + 107 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + <init> + + (ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/RegisteredCredential;Ljava/lang/String;Z)V + + 108 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + getAuthenticatorAttachment + + ()Ljava/util/Optional; + + 231 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getAuthenticatorAttachment + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + getAuthenticatorExtensionOutputs + + ()Ljava/util/Optional; + + 281 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 13 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getAuthenticatorExtensionOutputs + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + getClientExtensionOutputs + + ()Ljava/util/Optional; + + 262 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/AssertionResult::getClientExtensionOutputs + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + getCredentialId + + ()Lcom/yubico/webauthn/data/ByteArray; + + 130 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced return value with null for com/yubico/webauthn/AssertionResult::getCredentialId + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + getSignatureCount + + ()J + + 244 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced long return with 0 for com/yubico/webauthn/AssertionResult::getSignatureCount + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + getUserHandle + + ()Lcom/yubico/webauthn/data/ByteArray; + + 146 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced return value with null for com/yubico/webauthn/AssertionResult::getUserHandle + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + isBackedUp + + ()Z + + 217 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced boolean return with false for com/yubico/webauthn/AssertionResult::isBackedUp + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + isBackedUp + + ()Z + + 217 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced boolean return with true for com/yubico/webauthn/AssertionResult::isBackedUp + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + isBackupEligible + + ()Z + + 192 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced boolean return with false for com/yubico/webauthn/AssertionResult::isBackupEligible + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + isBackupEligible + + ()Z + + 192 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced boolean return with true for com/yubico/webauthn/AssertionResult::isBackupEligible + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + isUserVerified + + ()Z + + 165 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced boolean return with false for com/yubico/webauthn/AssertionResult::isUserVerified + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + isUserVerified + + ()Z + + 165 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced boolean return with true for com/yubico/webauthn/AssertionResult::isUserVerified + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + lambda$getClientExtensionOutputs$0 + + (Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs;)Z + + 263 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + negated conditional + + + + + + AssertionResult.java + + com.yubico.webauthn.AssertionResult + + lambda$getClientExtensionOutputs$0 + + (Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs;)Z + + 263 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 5 + + + + + + replaced boolean return with true for com/yubico/webauthn/AssertionResult::lambda$getClientExtensionOutputs$0 + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 112 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 14 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 114 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 24 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 115 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 34 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 91 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 93 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 95 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 38 + + + + + + 10 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 95 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 40 + + + + + + 11 + + + + com.yubico.webauthn.data.JsonIoSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 52 + + + + + + 14 + + + + com.yubico.webauthn.data.JsonIoSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 54 + + + + + + 15 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 58 + + + + + + 17 + + + + com.yubico.webauthn.data.JsonIoSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/AuthenticatorResponse;Lcom/yubico/webauthn/data/AuthenticatorAttachment;Lcom/yubico/webauthn/data/ClientExtensionOutputs;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 103 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 84 + + + + + + 21 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + builder + + ()Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages; + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::builder + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + getAuthenticatorAttachment + + ()Ljava/util/Optional; + + 139 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredential::getAuthenticatorAttachment + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + parseAssertionResponseJson + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredential; + + 290 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::parseAssertionResponseJson + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential + + parseRegistrationResponseJson + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredential; + + 235 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential::parseRegistrationResponseJson + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 93 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 15 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + Replaced bitwise AND with OR + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 30 + + + + + + 4 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + Replaced bitwise AND with OR + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 95 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 45 + + + + + + 7 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + Replaced bitwise AND with OR + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 96 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 60 + + + + + + 10 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + Replaced bitwise AND with OR + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 97 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 75 + + + + + + 13 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + Replaced bitwise AND with OR + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 90 + + + + + + 16 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + Replaced bitwise AND with OR + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 93 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 16 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + negated conditional + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 31 + + + + + + 4 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + negated conditional + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 95 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 46 + + + + + + 7 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + negated conditional + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 96 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 61 + + + + + + 10 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + negated conditional + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 97 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 76 + + + + + + 13 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + negated conditional + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 91 + + + + + + 16 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + negated conditional + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 100 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 104 + + + + + + 19 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + negated conditional + + + + + + AuthenticatorDataFlags.java + + com.yubico.webauthn.data.AuthenticatorDataFlags + + <init> + + (B)V + + 100 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 107 + + + + + + 20 + + + + com.yubico.webauthn.data.AuthenticatorDataFlagsSpec + + negated conditional + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + <init> + + (ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/CredentialRecord;Z)V + + 103 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + <init> + + (ZLcom/yubico/webauthn/data/PublicKeyCredential;Lcom/yubico/webauthn/CredentialRecord;Z)V + + 106 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + getAuthenticatorAttachment + + ()Ljava/util/Optional; + + 193 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getAuthenticatorAttachment + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + getAuthenticatorExtensionOutputs + + ()Ljava/util/Optional; + + 243 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 13 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getAuthenticatorExtensionOutputs + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + getClientExtensionOutputs + + ()Ljava/util/Optional; + + 224 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/AssertionResultV2::getClientExtensionOutputs + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + getSignatureCount + + ()J + + 206 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced long return with 0 for com/yubico/webauthn/AssertionResultV2::getSignatureCount + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + isBackedUp + + ()Z + + 179 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isBackedUp + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + isBackedUp + + ()Z + + 179 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isBackedUp + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + isBackupEligible + + ()Z + + 155 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isBackupEligible + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + isBackupEligible + + ()Z + + 155 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isBackupEligible + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + isUserVerified + + ()Z + + 130 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with false for com/yubico/webauthn/AssertionResultV2::isUserVerified + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + isUserVerified + + ()Z + + 130 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::isUserVerified + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + lambda$getClientExtensionOutputs$0 + + (Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs;)Z + + 225 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + AssertionResultV2.java + + com.yubico.webauthn.AssertionResultV2 + + lambda$getClientExtensionOutputs$0 + + (Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs;)Z + + 225 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 5 + + + + + + replaced boolean return with true for com/yubico/webauthn/AssertionResultV2::lambda$getClientExtensionOutputs$0 + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + isP256 + + (Ljava/security/spec/ECParameterSpec;)Z + + 67 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with false for com/yubico/webauthn/Crypto::isP256 + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + isP256 + + (Ljava/security/spec/ECParameterSpec;)Z + + 67 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/Crypto::isP256 + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + sha1 + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 114 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 11 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/Crypto::sha1 + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + sha256 + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 11 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/Crypto::sha256 + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + sha256 + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 110 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/Crypto::sha256 + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + sha384 + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 102 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 11 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/Crypto::sha384 + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + sha512 + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 106 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 11 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/Crypto::sha512 + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + verifySignature + + (Ljava/security/PublicKey;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z + + 85 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 11 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + removed call to java/security/Signature::initVerify + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + verifySignature + + (Ljava/security/PublicKey;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z + + 86 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 17 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + removed call to java/security/Signature::update + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + verifySignature + + (Ljava/security/PublicKey;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 25 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced boolean return with false for com/yubico/webauthn/Crypto::verifySignature + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + verifySignature + + (Ljava/security/PublicKey;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 25 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with true for com/yubico/webauthn/Crypto::verifySignature + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + verifySignature + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z + + 75 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with false for com/yubico/webauthn/Crypto::verifySignature + + + + + + Crypto.java + + com.yubico.webauthn.Crypto + + verifySignature + + (Ljava/security/cert/X509Certificate;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z + + 75 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/Crypto::verifySignature + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + attestationTrustPath + + ()Ljava/util/Optional; + + 459 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + attestationTrustPath + + ()Ljava/util/Optional; + + 461 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + attestationTrustPath + + ()Ljava/util/Optional; + + 463 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 30 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationTrustPath + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + attestationType + + ()Lcom/yubico/webauthn/data/AttestationType; + + 442 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + attestationType + + ()Lcom/yubico/webauthn/data/AttestationType; + + 445 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 35 + + + + + + 9 + + + + + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + attestationType + + ()Lcom/yubico/webauthn/data/AttestationType; + + 443 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + attestationType + + ()Lcom/yubico/webauthn/data/AttestationType; + + 448 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 47 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + attestationType + + ()Lcom/yubico/webauthn/data/AttestationType; + + 450 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 53 + + + + + + 13 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::attestationType + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + lambda$validate$0 + + (Lcom/yubico/webauthn/AttestationStatementVerifier;)V + + 427 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 16 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step20; + + 437 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step19::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + validate + + ()V + + 432 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 12 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + validate + + ()V + + 425 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 7 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to java/util/Optional::ifPresent + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step19 + + validate + + ()V + + 432 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 23 + + + + + + 5 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$0 + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/Boolean; + + 48 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$0 + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/Boolean; + + 49 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 11 + + + + + + 3 + + + + + + replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$0 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$1 + + ()Ljava/lang/IllegalArgumentException; + + 57 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with null for com/yubico/webauthn/TokenBindingValidator::lambda$validate$1 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$2 + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/TokenBindingInfo;)Ljava/lang/Boolean; + + 45 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 26 + + + + + + 6 + + + + + + replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$2 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$2 + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/TokenBindingInfo;)Ljava/lang/Boolean; + + 45 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 26 + + + + + + 6 + + + + + + replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$2 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$3 + + ()Ljava/lang/IllegalArgumentException; + + 65 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with null for com/yubico/webauthn/TokenBindingValidator::lambda$validate$3 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$4 + + (Ljava/util/Optional;Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/Boolean; + + 63 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 14 + + + + + + 2 + + + + + + replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$4 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$4 + + (Ljava/util/Optional;Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/Boolean; + + 63 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 2 + + + + + + replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$4 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$5 + + (Lcom/yubico/webauthn/data/TokenBindingInfo;)Ljava/lang/Boolean; + + 74 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 14 + + + + + + 4 + + + + + + replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$5 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$6 + + (Ljava/util/Optional;)Ljava/lang/Boolean; + + 83 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 14 + + + + + + 3 + + + + + + replaced Boolean return with False for com/yubico/webauthn/TokenBindingValidator::lambda$validate$6 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + lambda$validate$6 + + (Ljava/util/Optional;)Ljava/lang/Boolean; + + 83 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 3 + + + + + + replaced Boolean return with True for com/yubico/webauthn/TokenBindingValidator::lambda$validate$6 + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + validate + + (Ljava/util/Optional;Ljava/util/Optional;)Z + + 35 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 18 + + + + + + 3 + + + + + + replaced boolean return with false for com/yubico/webauthn/TokenBindingValidator::validate + + + + + + TokenBindingValidator.java + + com.yubico.webauthn.TokenBindingValidator + + validate + + (Ljava/util/Optional;Ljava/util/Optional;)Z + + 35 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 18 + + + + + + 3 + + + + + + replaced boolean return with true for com/yubico/webauthn/TokenBindingValidator::validate + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + <init> + + (Ljava/lang/String;)V + + 61 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.extension.appid.AppIdTest.disallowHttp(com.yubico.webauthn.extension.appid.AppIdTest) + + negated conditional + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + <init> + + (Ljava/lang/String;)V + + 62 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 16 + + + + + + 4 + + + + com.yubico.webauthn.extension.appid.AppIdTest.disallowHttp(com.yubico.webauthn.extension.appid.AppIdTest) + + removed call to com/yubico/webauthn/extension/appid/AppId::checkIsValid + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkIsValid + + (Ljava/lang/String;)V + + 73 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.extension.appid.AppIdTest.validUris(com.yubico.webauthn.extension.appid.AppIdTest) + + negated conditional + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkIsValid + + (Ljava/lang/String;)V + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 20 + + + + + + 5 + + + + com.yubico.webauthn.extension.appid.AppIdTest.disallowHttp(com.yubico.webauthn.extension.appid.AppIdTest) + + negated conditional + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkIsValid + + (Ljava/lang/String;)V + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 34 + + + + + + 9 + + + + com.yubico.webauthn.extension.appid.AppIdTest.validUris(com.yubico.webauthn.extension.appid.AppIdTest) + + negated conditional + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkIsValid + + (Ljava/lang/String;)V + + 83 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 43 + + + + + + 11 + + + + com.yubico.webauthn.extension.appid.AppIdTest.disallowSlashAsPath(com.yubico.webauthn.extension.appid.AppIdTest) + + removed call to com/yubico/webauthn/extension/appid/AppId::checkPathIsNotSlash + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkIsValid + + (Ljava/lang/String;)V + + 84 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 47 + + + + + + 12 + + + + com.yubico.webauthn.extension.appid.AppIdTest.disallowIP(com.yubico.webauthn.extension.appid.AppIdTest) + + removed call to com/yubico/webauthn/extension/appid/AppId::checkNotIpAddress + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkNotIpAddress + + (Ljava/net/URI;)V + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest) + + negated conditional + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkNotIpAddress + + (Ljava/net/URI;)V + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 4 + + + + com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest) + + negated conditional + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkNotIpAddress + + (Ljava/net/URI;)V + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 15 + + + + + + 7 + + + + com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest) + + negated conditional + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkPathIsNotSlash + + (Ljava/net/URI;)V + + 89 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest) + + negated conditional + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId + + checkValidUrl + + (Ljava/lang/String;)Ljava/net/URI; + + 97 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.extension.appid.AppIdTest.validUrls(com.yubico.webauthn.extension.appid.AppIdTest) + + replaced return value with null for com/yubico/webauthn/extension/appid/AppId::checkValidUrl + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + compareTo + + (Lcom/yubico/webauthn/data/AuthenticatorTransport;)I + + 160 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced int return with 0 for com/yubico/webauthn/data/AuthenticatorTransport::compareTo + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + lambda$of$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/AuthenticatorTransport;)Z + + 129 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced boolean return with false for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$0 + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + lambda$of$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/AuthenticatorTransport;)Z + + 129 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced boolean return with true for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$0 + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + lambda$of$1 + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport; + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::lambda$of$1 + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + of + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport; + + 127 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + negated conditional + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + of + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport; + + 128 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 31 + + + + + + 8 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::of + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + valueOf + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport; + + 143 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 62 + + + + + + 18 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + valueOf + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport; + + 145 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 67 + + + + + + 19 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + valueOf + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport; + + 147 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 72 + + + + + + 20 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + valueOf + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport; + + 149 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 77 + + + + + + 21 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + valueOf + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorTransport; + + 151 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 82 + + + + + + 22 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::valueOf + + + + + + AuthenticatorTransport.java + + com.yubico.webauthn.data.AuthenticatorTransport + + values + + ()[Lcom/yubico/webauthn/data/AuthenticatorTransport; + + 117 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 25 + + + + + + 0 + + + + com.yubico.webauthn.data.AuthenticatorTransportSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorTransport::values + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + appId + + (Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 621 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + appId + + (Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 622 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::appId + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + appId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 590 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + appId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 592 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::appId + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + attestationConveyancePreference + + (Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 668 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + attestationConveyancePreference + + (Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 669 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationConveyancePreference + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + attestationConveyancePreference + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 644 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + attestationConveyancePreference + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 646 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationConveyancePreference + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + attestationTrustSource + + (Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 701 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + attestationTrustSource + + (Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 702 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationTrustSource + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + attestationTrustSource + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 684 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + RelyingPartyV2.java + + com.yubico.webauthn.RelyingPartyV2$RelyingPartyV2Builder + + attestationTrustSource + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 686 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder::attestationTrustSource + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + appId + + (Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 694 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + appId + + (Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 695 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::appId + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + appId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 663 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + appId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 665 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::appId + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + attestationConveyancePreference + + (Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 741 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + attestationConveyancePreference + + (Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 742 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationConveyancePreference + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + attestationConveyancePreference + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 717 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + attestationConveyancePreference + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 719 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationConveyancePreference + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + attestationTrustSource + + (Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 774 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyRegistrationSpec + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + attestationTrustSource + + (Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 775 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyRegistrationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationTrustSource + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + attestationTrustSource + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 757 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyRegistrationSpec + + negated conditional + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder + + attestationTrustSource + + (Ljava/util/Optional;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 759 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyRegistrationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder::attestationTrustSource + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + name + + ()Lcom/yubico/webauthn/data/ByteArray; + + 464 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 85 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic::name + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 387 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 27 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + Replaced bitwise AND with OR + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 398 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 60 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + Replaced bitwise AND with OR + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 387 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 398 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 62 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 403 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 87 + + + + + + 16 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 406 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 105 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 414 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 140 + + + + + + 31 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 387 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 48 + + + + + + 8 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 398 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 82 + + + + + + 15 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmtPublic + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmtPublic; + + 413 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 161 + + + + + + 36 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + <init> + + (Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V + + 252 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + <init> + + (Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V + + 252 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 3 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + <init> + + (Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V + + 252 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 13 + + + + + + 4 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + <init> + + (Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V + + 257 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 26 + + + + + + 7 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + <init> + + (Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ByteArray;)V + + 257 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 29 + + + + + + 9 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + getRead + + ()Z + + 298 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced boolean return with false for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getRead + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + getRead + + ()Z + + 298 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced boolean return with true for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getRead + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + getWrite + + ()Ljava/util/Optional; + + 309 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::getWrite + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + read + + ()Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput; + + 272 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::read + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + write + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput; + + 285 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationInput + + write + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput; + + 286 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput::write + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 565 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 80 + + + + + + 15 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + changed conditional boundary + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 551 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 557 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 40 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 557 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 43 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 565 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 80 + + + + + + 15 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 567 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 104 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 551 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 30 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 557 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 65 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 565 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 100 + + + + + + 19 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsRsaParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms; + + 572 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 117 + + + + + + 23 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsRsaParms::parse + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + fromId + + (J)Ljava/util/Optional; + + 72 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromId + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + fromJson + + (J)Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier; + + 107 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 13 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with null for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromJson + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + fromPublicKey + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 84 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + fromPublicKey + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 89 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 27 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + fromPublicKey + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 53 + + + + + + 16 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + fromPublicKey + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 57 + + + + + + 19 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + fromPublicKey + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 102 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 100 + + + + + + 31 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/COSEAlgorithmIdentifier::fromPublicKey + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + lambda$fromId$0 + + (JLcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z + + 72 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + lambda$fromId$0 + + (JLcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Z + + 72 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 15 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced boolean return with true for com/yubico/webauthn/data/COSEAlgorithmIdentifier::lambda$fromId$0 + + + + + + COSEAlgorithmIdentifier.java + + com.yubico.webauthn.data.COSEAlgorithmIdentifier + + lambda$fromJson$1 + + (J)Ljava/lang/IllegalArgumentException; + + 109 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 5 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/data/COSEAlgorithmIdentifier::lambda$fromJson$1 + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + <init> + + (Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V + + 56 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + <init> + + (Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V + + 57 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + <init> + + (Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V + + 58 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 29 + + + + + + 7 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + <init> + + (Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V + + 65 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 54 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + <init> + + (Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V + + 59 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 45 + + + + + + 9 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + <init> + + (Lcom/yubico/webauthn/data/TokenBindingStatus;Ljava/util/Optional;)V + + 64 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 71 + + + + + + 15 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + getId + + ()Ljava/util/Optional; + + 83 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/TokenBindingInfo::getId + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + present + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/TokenBindingInfo; + + 74 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + present + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/TokenBindingInfo; + + 75 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + replaced return value with null for com/yubico/webauthn/data/TokenBindingInfo::present + + + + + + TokenBindingInfo.java + + com.yubico.webauthn.data.TokenBindingInfo + + supported + + ()Lcom/yubico/webauthn/data/TokenBindingInfo; + + 79 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/webauthn/data/TokenBindingInfo::supported + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + <init> + + (Lcom/yubico/webauthn/data/AuthenticatorAttachment;Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ResidentKeyRequirement;Lcom/yubico/webauthn/data/UserVerificationRequirement;)V + + 180 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 13 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + negated conditional + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + <init> + + (Lcom/yubico/webauthn/data/AuthenticatorAttachment;Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ResidentKeyRequirement;Lcom/yubico/webauthn/data/UserVerificationRequirement;)V + + 182 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 24 + + + + + + 3 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + negated conditional + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + <init> + + (Lcom/yubico/webauthn/data/AuthenticatorAttachment;Ljava/lang/Boolean;Lcom/yubico/webauthn/data/ResidentKeyRequirement;Lcom/yubico/webauthn/data/UserVerificationRequirement;)V + + 184 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 32 + + + + + + 5 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + negated conditional + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + getAuthenticatorAttachment + + ()Ljava/util/Optional; + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getAuthenticatorAttachment + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + getResidentKey + + ()Ljava/util/Optional; + + 136 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyFallsBackToOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getResidentKey + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + getUserVerification + + ()Ljava/util/Optional; + + 169 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::getUserVerification + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + isRequireResidentKey + + ()Ljava/lang/Boolean; + + 149 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced Boolean return with False for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::isRequireResidentKey + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + isRequireResidentKey + + ()Ljava/lang/Boolean; + + 149 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced Boolean return with True for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::isRequireResidentKey + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + lambda$isRequireResidentKey$0 + + (Lcom/yubico/webauthn/data/ResidentKeyRequirement;)Ljava/lang/Boolean; + + 149 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria + + lambda$isRequireResidentKey$0 + + (Lcom/yubico/webauthn/data/ResidentKeyRequirement;)Ljava/lang/Boolean; + + 149 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced Boolean return with True for com/yubico/webauthn/data/AuthenticatorSelectionCriteria::lambda$isRequireResidentKey$0 + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + allowCredentials + + (Ljava/util/List;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 253 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::allowCredentials + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + allowCredentials + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 241 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + allowCredentials + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 242 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::allowCredentials + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + rpId + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 232 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::rpId + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + rpId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 221 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + rpId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 222 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::rpId + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + timeout + + (J)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 213 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 3 + + + + + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + timeout + + (Ljava/lang/Long;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 203 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 193 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 195 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder::timeout + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + authenticatorData + + ()Lcom/yubico/webauthn/data/ByteArray; + + 315 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::authenticatorData + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + clientData + + ()Lcom/yubico/webauthn/data/ByteArray; + + 319 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::clientData + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step10; + + 311 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + signature + + ()Lcom/yubico/webauthn/data/ByteArray; + + 323 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step8::signature + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + validate + + ()V + + 304 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + validate + + ()V + + 305 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 21 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + validate + + ()V + + 306 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 37 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + validate + + ()V + + 304 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 16 + + + + + + 4 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + validate + + ()V + + 305 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 32 + + + + + + 9 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step8 + + validate + + ()V + + 306 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 48 + + + + + + 14 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder + + authenticatorSelection + + (Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 126 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::authenticatorSelection + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder + + authenticatorSelection + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 115 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder + + authenticatorSelection + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::authenticatorSelection + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder + + timeout + + (J)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 158 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::timeout + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 140 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 22 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + changed conditional boundary + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 139 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 140 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 15 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 140 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 22 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 50 + + + + + + 16 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder::timeout + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step21 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Finished; + + 637 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step21::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step21 + + signatureCounterValid + + ()Z + + 631 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 20 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + changed conditional boundary + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step21 + + signatureCounterValid + + ()Z + + 631 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step21 + + signatureCounterValid + + ()Z + + 631 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step21 + + signatureCounterValid + + ()Z + + 631 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 20 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step21 + + signatureCounterValid + + ()Z + + 631 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 30 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step21::signatureCounterValid + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step21 + + validate + + ()V + + 626 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 23 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + Replaced long addition with subtraction + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step21 + + validate + + ()V + + 624 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step21 + + validate + + ()V + + 624 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder + + authenticatorSelection + + (Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 359 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::authenticatorSelection + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder + + authenticatorSelection + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 348 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder + + authenticatorSelection + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 349 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::authenticatorSelection + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder + + excludeCredentials + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 328 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.data.BuildersSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::excludeCredentials + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder + + excludeCredentials + + (Ljava/util/Set;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 340 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::excludeCredentials + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder + + timeout + + (J)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 317 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 3 + + + + + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder + + timeout + + (Ljava/lang/Long;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 309 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 299 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + negated conditional + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder + + timeout + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 301 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder::timeout + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step + + next + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step; + + 134 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/webauthn/FinishAssertionSteps$Step::validate + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step + + next + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step; + + 135 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::next + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step + + run + + ()Lcom/yubico/webauthn/AssertionResult; + + 139 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step + + run + + ()Lcom/yubico/webauthn/AssertionResult; + + 140 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 13 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::run + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step + + run + + ()Lcom/yubico/webauthn/AssertionResult; + + 142 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 20 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::run + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step + + runV2 + + ()Lcom/yubico/webauthn/AssertionResultV2; + + 147 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step + + runV2 + + ()Lcom/yubico/webauthn/AssertionResultV2; + + 148 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 13 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::runV2 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step + + runV2 + + ()Lcom/yubico/webauthn/AssertionResultV2; + + 150 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 20 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step::runV2 + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest$AssertionRequestBuilder + + userHandle + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder; + + 297 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest$AssertionRequestBuilder + + userHandle + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder; + + 301 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::userHandle + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest$AssertionRequestBuilder + + userHandle + + (Ljava/util/Optional;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder; + + 277 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest$AssertionRequestBuilder + + userHandle + + (Ljava/util/Optional;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder; + + 278 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::userHandle + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest$AssertionRequestBuilder + + username + + (Ljava/lang/String;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder; + + 256 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + negated conditional + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest$AssertionRequestBuilder + + username + + (Ljava/lang/String;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder; + + 259 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::username + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest$AssertionRequestBuilder + + username + + (Ljava/util/Optional;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder; + + 236 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest$AssertionRequestBuilder + + username + + (Ljava/util/Optional;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder; + + 237 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder::username + + + + + + AuthenticatorAssertionExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs + + <init> + + (Ljava/util/List;)V + + 68 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + AuthenticatorAssertionExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs + + fromAuthenticatorData + + (Lcom/yubico/webauthn/data/AuthenticatorData;)Ljava/util/Optional; + + 103 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::fromAuthenticatorData + + + + + + AuthenticatorAssertionExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs + + fromCbor + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional; + + 114 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + AuthenticatorAssertionExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs + + fromCbor + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional; + + 110 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to java/util/Optional::ifPresent + + + + + + AuthenticatorAssertionExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs + + fromCbor + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional; + + 117 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 35 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::fromCbor + + + + + + AuthenticatorAssertionExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 125 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + AuthenticatorAssertionExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 128 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Collections.emptySet for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::getExtensionIds + + + + + + AuthenticatorAssertionExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorAssertionExtensionOutputs + + getUvm + + ()Ljava/util/Optional; + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionExtensionOutputs::getUvm + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lcom/yubico/webauthn/data/UserVerificationRequirement;Lcom/yubico/webauthn/data/AssertionExtensionInputs;)V + + 113 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lcom/yubico/webauthn/data/UserVerificationRequirement;Lcom/yubico/webauthn/data/AssertionExtensionInputs;)V + + 118 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lcom/yubico/webauthn/data/UserVerificationRequirement;Lcom/yubico/webauthn/data/AssertionExtensionInputs;)V + + 123 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 46 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions + + builder + + ()Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder$MandatoryStages; + + 164 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::builder + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions + + getAllowCredentials + + ()Ljava/util/Optional; + + 133 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getAllowCredentials + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions + + getTimeout + + ()Ljava/util/Optional; + + 129 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getTimeout + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions + + getUserVerification + + ()Ljava/util/Optional; + + 137 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::getUserVerification + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions + + toCredentialsGetJson + + ()Ljava/lang/String; + + 160 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 24 + + + + + + 5 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with "" for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions::toCredentialsGetJson + + + + + + U2fRawRegisterResponse.java + + com.yubico.webauthn.U2fRawRegisterResponse + + packBytesToSign + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 75 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 9 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + removed call to com/google/common/io/ByteArrayDataOutput::write + + + + + + U2fRawRegisterResponse.java + + com.yubico.webauthn.U2fRawRegisterResponse + + packBytesToSign + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 76 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 15 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + removed call to com/google/common/io/ByteArrayDataOutput::write + + + + + + U2fRawRegisterResponse.java + + com.yubico.webauthn.U2fRawRegisterResponse + + packBytesToSign + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 21 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + removed call to com/google/common/io/ByteArrayDataOutput::write + + + + + + U2fRawRegisterResponse.java + + com.yubico.webauthn.U2fRawRegisterResponse + + packBytesToSign + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 78 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 27 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + removed call to com/google/common/io/ByteArrayDataOutput::write + + + + + + U2fRawRegisterResponse.java + + com.yubico.webauthn.U2fRawRegisterResponse + + packBytesToSign + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 79 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 33 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + removed call to com/google/common/io/ByteArrayDataOutput::write + + + + + + U2fRawRegisterResponse.java + + com.yubico.webauthn.U2fRawRegisterResponse + + packBytesToSign + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 80 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 41 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/U2fRawRegisterResponse::packBytesToSign + + + + + + U2fRawRegisterResponse.java + + com.yubico.webauthn.U2fRawRegisterResponse + + verifySignature + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Z + + 68 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 20 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with false for com/yubico/webauthn/U2fRawRegisterResponse::verifySignature + + + + + + U2fRawRegisterResponse.java + + com.yubico.webauthn.U2fRawRegisterResponse + + verifySignature + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Z + + 68 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 20 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/U2fRawRegisterResponse::verifySignature + + + + + + KeyProtectionType.java + + com.yubico.webauthn.extension.uvm.KeyProtectionType + + fromName + + (Ljava/lang/String;)Lcom/yubico/webauthn/extension/uvm/KeyProtectionType; + + 130 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::fromName + + + + + + KeyProtectionType.java + + com.yubico.webauthn.extension.uvm.KeyProtectionType + + fromValue + + (S)Lcom/yubico/webauthn/extension/uvm/KeyProtectionType; + + 115 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 5 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::fromValue + + + + + + KeyProtectionType.java + + com.yubico.webauthn.extension.uvm.KeyProtectionType + + lambda$fromName$2 + + (Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/KeyProtectionType;)Z + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced boolean return with false for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$2 + + + + + + KeyProtectionType.java + + com.yubico.webauthn.extension.uvm.KeyProtectionType + + lambda$fromName$2 + + (Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/KeyProtectionType;)Z + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced boolean return with true for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$2 + + + + + + KeyProtectionType.java + + com.yubico.webauthn.extension.uvm.KeyProtectionType + + lambda$fromName$3 + + (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; + + 135 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromName$3 + + + + + + KeyProtectionType.java + + com.yubico.webauthn.extension.uvm.KeyProtectionType + + lambda$fromValue$0 + + (SLcom/yubico/webauthn/extension/uvm/KeyProtectionType;)Z + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + KeyProtectionType.java + + com.yubico.webauthn.extension.uvm.KeyProtectionType + + lambda$fromValue$0 + + (SLcom/yubico/webauthn/extension/uvm/KeyProtectionType;)Z + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced boolean return with true for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromValue$0 + + + + + + KeyProtectionType.java + + com.yubico.webauthn.extension.uvm.KeyProtectionType + + lambda$fromValue$1 + + (S)Ljava/lang/IllegalArgumentException; + + 120 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 23 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/extension/uvm/KeyProtectionType::lambda$fromValue$1 + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;JLjava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;)V + + 207 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;JLjava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;)V + + 208 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;JLjava/util/Set;Ljava/lang/Boolean;Ljava/lang/Boolean;)V + + 209 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential + + builder + + ()Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages; + + 309 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RegisteredCredential::builder + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential + + getParsedPublicKey + + ()Ljava/security/PublicKey; + + 108 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/webauthn/RegisteredCredential::getParsedPublicKey + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential + + getTransports + + ()Ljava/util/Optional; + + 255 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::getTransports + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential + + isBackedUp + + ()Ljava/util/Optional; + + 305 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::isBackedUp + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential + + isBackupEligible + + ()Ljava/util/Optional; + + 281 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/RegisteredCredential::isBackupEligible + + + + + + MatcherProtectionType.java + + com.yubico.webauthn.extension.uvm.MatcherProtectionType + + fromName + + (Ljava/lang/String;)Lcom/yubico/webauthn/extension/uvm/MatcherProtectionType; + + 93 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::fromName + + + + + + MatcherProtectionType.java + + com.yubico.webauthn.extension.uvm.MatcherProtectionType + + fromValue + + (I)Lcom/yubico/webauthn/extension/uvm/MatcherProtectionType; + + 78 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 5 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::fromValue + + + + + + MatcherProtectionType.java + + com.yubico.webauthn.extension.uvm.MatcherProtectionType + + lambda$fromName$2 + + (Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/MatcherProtectionType;)Z + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced boolean return with false for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$2 + + + + + + MatcherProtectionType.java + + com.yubico.webauthn.extension.uvm.MatcherProtectionType + + lambda$fromName$2 + + (Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/MatcherProtectionType;)Z + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced boolean return with true for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$2 + + + + + + MatcherProtectionType.java + + com.yubico.webauthn.extension.uvm.MatcherProtectionType + + lambda$fromName$3 + + (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromName$3 + + + + + + MatcherProtectionType.java + + com.yubico.webauthn.extension.uvm.MatcherProtectionType + + lambda$fromValue$0 + + (ILcom/yubico/webauthn/extension/uvm/MatcherProtectionType;)Z + + 79 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + MatcherProtectionType.java + + com.yubico.webauthn.extension.uvm.MatcherProtectionType + + lambda$fromValue$0 + + (ILcom/yubico/webauthn/extension/uvm/MatcherProtectionType;)Z + + 79 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced boolean return with true for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromValue$0 + + + + + + MatcherProtectionType.java + + com.yubico.webauthn.extension.uvm.MatcherProtectionType + + lambda$fromValue$1 + + (I)Ljava/lang/IllegalArgumentException; + + 83 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 23 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/extension/uvm/MatcherProtectionType::lambda$fromValue$1 + + + + + + UserVerificationMethod.java + + com.yubico.webauthn.extension.uvm.UserVerificationMethod + + fromName + + (Ljava/lang/String;)Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod; + + 218 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::fromName + + + + + + UserVerificationMethod.java + + com.yubico.webauthn.extension.uvm.UserVerificationMethod + + fromValue + + (I)Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod; + + 202 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 5 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::fromValue + + + + + + UserVerificationMethod.java + + com.yubico.webauthn.extension.uvm.UserVerificationMethod + + lambda$fromName$2 + + (Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z + + 219 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced boolean return with false for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$2 + + + + + + UserVerificationMethod.java + + com.yubico.webauthn.extension.uvm.UserVerificationMethod + + lambda$fromName$2 + + (Ljava/lang/String;Lcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z + + 219 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced boolean return with true for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$2 + + + + + + UserVerificationMethod.java + + com.yubico.webauthn.extension.uvm.UserVerificationMethod + + lambda$fromName$3 + + (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; + + 223 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromName$3 + + + + + + UserVerificationMethod.java + + com.yubico.webauthn.extension.uvm.UserVerificationMethod + + lambda$fromValue$0 + + (ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z + + 203 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + UserVerificationMethod.java + + com.yubico.webauthn.extension.uvm.UserVerificationMethod + + lambda$fromValue$0 + + (ILcom/yubico/webauthn/extension/uvm/UserVerificationMethod;)Z + + 203 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced boolean return with true for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromValue$0 + + + + + + UserVerificationMethod.java + + com.yubico.webauthn.extension.uvm.UserVerificationMethod + + lambda$fromValue$1 + + (I)Ljava/lang/IllegalArgumentException; + + 207 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 25 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/extension/uvm/UserVerificationMethod::lambda$fromValue$1 + + + + + + AttestationObject.java + + com.yubico.webauthn.data.AttestationObject + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 101 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestationObject.java + + com.yubico.webauthn.data.AttestationObject + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 107 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 29 + + + + + + 8 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestationObject.java + + com.yubico.webauthn.data.AttestationObject + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 113 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 57 + + + + + + 14 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestationObject.java + + com.yubico.webauthn.data.AttestationObject + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 118 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 80 + + + + + + 23 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestationObject.java + + com.yubico.webauthn.data.AttestationObject + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 129 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 126 + + + + + + 33 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestationObject.java + + com.yubico.webauthn.data.AttestationObject + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 133 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 149 + + + + + + 42 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestationObject.java + + com.yubico.webauthn.data.AttestationObject + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 194 + + + + + + 52 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestationObject.java + + com.yubico.webauthn.data.AttestationObject + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 148 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 217 + + + + + + 61 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step18 + + attestationStatementVerifier + + ()Ljava/util/Optional; + + 400 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 75 + + + + + + 24 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step18 + + attestationStatementVerifier + + ()Ljava/util/Optional; + + 402 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 83 + + + + + + 27 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step18 + + attestationStatementVerifier + + ()Ljava/util/Optional; + + 404 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 91 + + + + + + 30 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step18 + + attestationStatementVerifier + + ()Ljava/util/Optional; + + 406 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 99 + + + + + + 33 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step18 + + attestationStatementVerifier + + ()Ljava/util/Optional; + + 408 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 107 + + + + + + 36 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step18 + + attestationStatementVerifier + + ()Ljava/util/Optional; + + 410 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 115 + + + + + + 39 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step18::attestationStatementVerifier + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step18 + + format + + ()Ljava/lang/String; + + 394 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with "" for com/yubico/webauthn/FinishRegistrationSteps$Step18::format + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step18 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step19; + + 390 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step18::nextStep + + + + + + CollectedClientData.java + + com.yubico.webauthn.data.CollectedClientData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 80 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + CollectedClientData.java + + com.yubico.webauthn.data.CollectedClientData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 84 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 7 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + CollectedClientData.java + + com.yubico.webauthn.data.CollectedClientData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 85 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 30 + + + + + + 9 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + CollectedClientData.java + + com.yubico.webauthn.data.CollectedClientData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;)V + + 84 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 43 + + + + + + 12 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + CollectedClientData.java + + com.yubico.webauthn.data.CollectedClientData + + getTokenBinding + + ()Ljava/util/Optional; + + 117 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/CollectedClientData::getTokenBinding + + + + + + CollectedClientData.java + + com.yubico.webauthn.data.CollectedClientData + + lambda$getTokenBinding$0 + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ByteArray; + + 129 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + replaced return value with null for com/yubico/webauthn/data/CollectedClientData::lambda$getTokenBinding$0 + + + + + + CollectedClientData.java + + com.yubico.webauthn.data.CollectedClientData + + lambda$getTokenBinding$1 + + (Lcom/fasterxml/jackson/databind/JsonNode;)Lcom/yubico/webauthn/data/TokenBindingInfo; + + 120 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + CollectedClientData.java + + com.yubico.webauthn.data.CollectedClientData + + lambda$getTokenBinding$1 + + (Lcom/fasterxml/jackson/databind/JsonNode;)Lcom/yubico/webauthn/data/TokenBindingInfo; + + 122 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 38 + + + + + + 10 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + replaced return value with null for com/yubico/webauthn/data/CollectedClientData::lambda$getTokenBinding$1 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step20 + + findTrustRoots + + ()Ljava/util/Optional; + + 504 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::findTrustRoots + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step20 + + lambda$findTrustRoots$0 + + (Lcom/yubico/webauthn/data/ByteArray;)Z + + 517 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step20 + + lambda$findTrustRoots$0 + + (Lcom/yubico/webauthn/data/ByteArray;)Z + + 517 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 14 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$0 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step20 + + lambda$findTrustRoots$1 + + (Ljava/util/List;)Ljava/util/Optional; + + 519 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step20 + + lambda$findTrustRoots$1 + + (Ljava/util/List;)Ljava/util/Optional; + + 520 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$1 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step20 + + lambda$findTrustRoots$2 + + (Lcom/yubico/webauthn/attestation/AttestationTrustSource;Ljava/util/List;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult; + + 508 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 35 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$2 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step20 + + lambda$findTrustRoots$3 + + (Lcom/yubico/webauthn/attestation/AttestationTrustSource;)Ljava/util/Optional; + + 506 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Step20::lambda$findTrustRoots$3 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step20 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step21; + + 500 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step20::nextStep + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest + + <init> + + (Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V + + 90 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest + + <init> + + (Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V + + 96 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 23 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest + + builder + + ()Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder$MandatoryStages; + + 198 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/AssertionRequest::builder + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest + + fromJson + + (Ljava/lang/String;)Lcom/yubico/webauthn/AssertionRequest; + + 194 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with null for com/yubico/webauthn/AssertionRequest::fromJson + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest + + getUserHandle + + ()Ljava/util/Optional; + + 140 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/AssertionRequest::getUserHandle + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest + + getUsername + + ()Ljava/util/Optional; + + 121 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/AssertionRequest::getUsername + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest + + toCredentialsGetJson + + ()Ljava/lang/String; + + 162 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with "" for com/yubico/webauthn/AssertionRequest::toCredentialsGetJson + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest + + toJson + + ()Ljava/lang/String; + + 180 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with "" for com/yubico/webauthn/AssertionRequest::toJson + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilder + + appidExclude + + (Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder; + + 211 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::appidExclude + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilder + + appidExclude + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder; + + 191 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::appidExclude + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilder + + credProps + + ()Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder; + + 223 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::credProps + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilder + + credProps + + (Ljava/lang/Boolean;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder; + + 242 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::credProps + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilder + + largeBlob + + (Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationInput$LargeBlobSupport;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder; + + 263 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::largeBlob + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilder + + largeBlob + + (Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationInput;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder; + + 277 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::largeBlob + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilder + + uvm + + ()Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder; + + 288 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::uvm + + + + + + RegistrationExtensionInputs.java + + com.yubico.webauthn.data.RegistrationExtensionInputs$RegistrationExtensionInputsBuilder + + uvm + + (Ljava/lang/Boolean;)Lcom/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder; + + 294 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/data/RegistrationExtensionInputs$RegistrationExtensionInputsBuilder::uvm + + + + + + AppleAttestationStatementVerifier.java + + com.yubico.webauthn.AppleAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 45 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/AppleAttestationStatementVerifier::getAttestationType + + + + + + AppleAttestationStatementVerifier.java + + com.yubico.webauthn.AppleAttestationStatementVerifier + + lambda$verifyAttestationSignature$0 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 71 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + AppleAttestationStatementVerifier.java + + com.yubico.webauthn.AppleAttestationStatementVerifier + + lambda$verifyAttestationSignature$0 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 88 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 86 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + AppleAttestationStatementVerifier.java + + com.yubico.webauthn.AppleAttestationStatementVerifier + + lambda$verifyAttestationSignature$0 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 112 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 160 + + + + + + 27 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + AppleAttestationStatementVerifier.java + + com.yubico.webauthn.AppleAttestationStatementVerifier + + lambda$verifyAttestationSignature$0 + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;Ljava/security/cert/X509Certificate;)Ljava/lang/Boolean; + + 119 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 186 + + + + + + 32 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced Boolean return with False for com/yubico/webauthn/AppleAttestationStatementVerifier::lambda$verifyAttestationSignature$0 + + + + + + AppleAttestationStatementVerifier.java + + com.yubico.webauthn.AppleAttestationStatementVerifier + + lambda$verifyAttestationSignature$1 + + ()Ljava/lang/IllegalArgumentException; + + 123 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/webauthn/AppleAttestationStatementVerifier::lambda$verifyAttestationSignature$1 + + + + + + AppleAttestationStatementVerifier.java + + com.yubico.webauthn.AppleAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 62 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 50 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with false for com/yubico/webauthn/AppleAttestationStatementVerifier::verifyAttestationSignature + + + + + + AppleAttestationStatementVerifier.java + + com.yubico.webauthn.AppleAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 62 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 50 + + + + + + 8 + + + + + + replaced boolean return with true for com/yubico/webauthn/AppleAttestationStatementVerifier::verifyAttestationSignature + + + + + + AuthenticatorRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs + + <init> + + (Ljava/util/List;)V + + 69 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AuthenticatorRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs + + fromAuthenticatorData + + (Lcom/yubico/webauthn/data/AuthenticatorData;)Ljava/util/Optional; + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::fromAuthenticatorData + + + + + + AuthenticatorRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs + + fromCbor + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional; + + 114 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AuthenticatorRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs + + fromCbor + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional; + + 110 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 14 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to java/util/Optional::ifPresent + + + + + + AuthenticatorRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs + + fromCbor + + (Lcom/upokecenter/cbor/CBORObject;)Ljava/util/Optional; + + 117 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 35 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::fromCbor + + + + + + AuthenticatorRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 125 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AuthenticatorRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 128 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Collections.emptySet for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::getExtensionIds + + + + + + AuthenticatorRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.AuthenticatorRegistrationExtensionOutputs + + getUvm + + ()Ljava/util/Optional; + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorRegistrationExtensionOutputs::getUvm + + + + + + PublicKeyCredentialType.java + + com.yubico.webauthn.data.PublicKeyCredentialType + + fromId + + (Ljava/lang/String;)Ljava/util/Optional; + + 65 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + PublicKeyCredentialType.java + + com.yubico.webauthn.data.PublicKeyCredentialType + + fromId + + (Ljava/lang/String;)Ljava/util/Optional; + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 7 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/PublicKeyCredentialType::fromId + + + + + + PublicKeyCredentialType.java + + com.yubico.webauthn.data.PublicKeyCredentialType + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredentialType; + + 70 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + PublicKeyCredentialType.java + + com.yubico.webauthn.data.PublicKeyCredentialType + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/PublicKeyCredentialType; + + 71 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 23 + + + + + + 5 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialType::fromJsonString + + + + + + PublicKeyCredentialType.java + + com.yubico.webauthn.data.PublicKeyCredentialType + + lambda$fromId$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)Z + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced boolean return with false for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromId$0 + + + + + + PublicKeyCredentialType.java + + com.yubico.webauthn.data.PublicKeyCredentialType + + lambda$fromId$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)Z + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced boolean return with true for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromId$0 + + + + + + PublicKeyCredentialType.java + + com.yubico.webauthn.data.PublicKeyCredentialType + + lambda$fromJsonString$1 + + (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; + + 74 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 25 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialType::lambda$fromJsonString$1 + + + + + + TokenBindingStatus.java + + com.yubico.webauthn.data.TokenBindingStatus + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/TokenBindingStatus; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + TokenBindingStatus.java + + com.yubico.webauthn.data.TokenBindingStatus + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/TokenBindingStatus; + + 78 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 23 + + + + + + 5 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + replaced return value with null for com/yubico/webauthn/data/TokenBindingStatus::fromJsonString + + + + + + TokenBindingStatus.java + + com.yubico.webauthn.data.TokenBindingStatus + + fromValue + + (Ljava/lang/String;)Ljava/util/Optional; + + 72 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + negated conditional + + + + + + TokenBindingStatus.java + + com.yubico.webauthn.data.TokenBindingStatus + + fromValue + + (Ljava/lang/String;)Ljava/util/Optional; + + 73 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 7 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/TokenBindingStatus::fromValue + + + + + + TokenBindingStatus.java + + com.yubico.webauthn.data.TokenBindingStatus + + lambda$fromJsonString$1 + + (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 25 + + + + + + 3 + + + + + + replaced return value with null for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromJsonString$1 + + + + + + TokenBindingStatus.java + + com.yubico.webauthn.data.TokenBindingStatus + + lambda$fromValue$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/TokenBindingStatus;)Z + + 73 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.CollectedClientDataSpec + + replaced boolean return with false for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromValue$0 + + + + + + TokenBindingStatus.java + + com.yubico.webauthn.data.TokenBindingStatus + + lambda$fromValue$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/TokenBindingStatus;)Z + + 73 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced boolean return with true for com/yubico/webauthn/data/TokenBindingStatus::lambda$fromValue$0 + + + + + + UserVerificationRequirement.java + + com.yubico.webauthn.data.UserVerificationRequirement + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/UserVerificationRequirement; + + 85 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + UserVerificationRequirement.java + + com.yubico.webauthn.data.UserVerificationRequirement + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/UserVerificationRequirement; + + 86 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 23 + + + + + + 5 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with null for com/yubico/webauthn/data/UserVerificationRequirement::fromJsonString + + + + + + UserVerificationRequirement.java + + com.yubico.webauthn.data.UserVerificationRequirement + + fromValue + + (Ljava/lang/String;)Ljava/util/Optional; + + 80 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + UserVerificationRequirement.java + + com.yubico.webauthn.data.UserVerificationRequirement + + fromValue + + (Ljava/lang/String;)Ljava/util/Optional; + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/UserVerificationRequirement::fromValue + + + + + + UserVerificationRequirement.java + + com.yubico.webauthn.data.UserVerificationRequirement + + lambda$fromJsonString$1 + + (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; + + 89 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 25 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromJsonString$1 + + + + + + UserVerificationRequirement.java + + com.yubico.webauthn.data.UserVerificationRequirement + + lambda$fromValue$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/UserVerificationRequirement;)Z + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with false for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromValue$0 + + + + + + UserVerificationRequirement.java + + com.yubico.webauthn.data.UserVerificationRequirement + + lambda$fromValue$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/UserVerificationRequirement;)Z + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced boolean return with true for com/yubico/webauthn/data/UserVerificationRequirement::lambda$fromValue$0 + + + + + + AttestationConveyancePreference.java + + com.yubico.webauthn.data.AttestationConveyancePreference + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AttestationConveyancePreference; + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + AttestationConveyancePreference.java + + com.yubico.webauthn.data.AttestationConveyancePreference + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AttestationConveyancePreference; + + 99 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 23 + + + + + + 5 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/data/AttestationConveyancePreference::fromJsonString + + + + + + AttestationConveyancePreference.java + + com.yubico.webauthn.data.AttestationConveyancePreference + + fromString + + (Ljava/lang/String;)Ljava/util/Optional; + + 93 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + AttestationConveyancePreference.java + + com.yubico.webauthn.data.AttestationConveyancePreference + + fromString + + (Ljava/lang/String;)Ljava/util/Optional; + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 7 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AttestationConveyancePreference::fromString + + + + + + AttestationConveyancePreference.java + + com.yubico.webauthn.data.AttestationConveyancePreference + + lambda$fromJsonString$1 + + (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; + + 102 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 25 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromJsonString$1 + + + + + + AttestationConveyancePreference.java + + com.yubico.webauthn.data.AttestationConveyancePreference + + lambda$fromString$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Z + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced boolean return with false for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromString$0 + + + + + + AttestationConveyancePreference.java + + com.yubico.webauthn.data.AttestationConveyancePreference + + lambda$fromString$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/AttestationConveyancePreference;)Z + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced boolean return with true for com/yubico/webauthn/data/AttestationConveyancePreference::lambda$fromString$0 + + + + + + ClientRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.ClientRegistrationExtensionOutputs + + getAppidExclude + + ()Ljava/util/Optional; + + 101 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getAppidExclude + + + + + + ClientRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.ClientRegistrationExtensionOutputs + + getCredProps + + ()Ljava/util/Optional; + + 116 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getCredProps + + + + + + ClientRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.ClientRegistrationExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 76 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + ClientRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.ClientRegistrationExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 79 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 23 + + + + + + 4 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + ClientRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.ClientRegistrationExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 82 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 35 + + + + + + 7 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + ClientRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.ClientRegistrationExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 85 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 46 + + + + + + 10 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Collections.emptySet for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getExtensionIds + + + + + + ClientRegistrationExtensionOutputs.java + + com.yubico.webauthn.data.ClientRegistrationExtensionOutputs + + getLargeBlob + + ()Ljava/util/Optional; + + 128 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/ClientRegistrationExtensionOutputs::getLargeBlob + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult + + <init> + + (Ljava/util/Set;Ljava/security/cert/CertStore;ZLjava/util/function/Predicate;)V + + 136 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult + + builder + + ()Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1; + + 187 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::builder + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult + + getCertStore + + ()Ljava/util/Optional; + + 158 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getCertStore + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult + + getPolicyTreeValidator + + ()Ljava/util/Optional; + + 183 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getPolicyTreeValidator + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult + + getTrustRoots + + ()Ljava/util/Set; + + 288 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Collections.emptySet for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::getTrustRoots + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult + + isEnableRevocationChecking + + ()Z + + 294 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 5 + + + + + + 0 + + + + + + replaced boolean return with false for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::isEnableRevocationChecking + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult + + isEnableRevocationChecking + + ()Z + + 294 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 5 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult::isEnableRevocationChecking + + + + + + X5cAttestationStatementVerifier.java + + com.yubico.webauthn.X5cAttestationStatementVerifier + + getAttestationTrustPath + + (Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional; + + 48 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + X5cAttestationStatementVerifier.java + + com.yubico.webauthn.X5cAttestationStatementVerifier + + getAttestationTrustPath + + (Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional; + + 48 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 13 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + X5cAttestationStatementVerifier.java + + com.yubico.webauthn.X5cAttestationStatementVerifier + + getAttestationTrustPath + + (Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional; + + 52 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 40 + + + + + + 12 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + X5cAttestationStatementVerifier.java + + com.yubico.webauthn.X5cAttestationStatementVerifier + + getAttestationTrustPath + + (Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional; + + 67 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 93 + + + + + + 25 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::getAttestationTrustPath + + + + + + X5cAttestationStatementVerifier.java + + com.yubico.webauthn.X5cAttestationStatementVerifier + + getX5cArray + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/fasterxml/jackson/databind/JsonNode; + + 74 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/X5cAttestationStatementVerifier::getX5cArray + + + + + + X5cAttestationStatementVerifier.java + + com.yubico.webauthn.X5cAttestationStatementVerifier + + getX5cAttestationCertificate + + (Lcom/yubico/webauthn/data/AttestationObject;)Ljava/util/Optional; + + 41 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::getX5cAttestationCertificate + + + + + + X5cAttestationStatementVerifier.java + + com.yubico.webauthn.X5cAttestationStatementVerifier + + lambda$getX5cAttestationCertificate$0 + + (Ljava/util/List;)Ljava/util/Optional; + + 41 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with Optional.empty for com/yubico/webauthn/X5cAttestationStatementVerifier::lambda$getX5cAttestationCertificate$0 + + + + + + ResidentKeyRequirement.java + + com.yubico.webauthn.data.ResidentKeyRequirement + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ResidentKeyRequirement; + + 124 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + negated conditional + + + + + + ResidentKeyRequirement.java + + com.yubico.webauthn.data.ResidentKeyRequirement + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/ResidentKeyRequirement; + + 125 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 23 + + + + + + 5 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + replaced return value with null for com/yubico/webauthn/data/ResidentKeyRequirement::fromJsonString + + + + + + ResidentKeyRequirement.java + + com.yubico.webauthn.data.ResidentKeyRequirement + + fromValue + + (Ljava/lang/String;)Ljava/util/Optional; + + 119 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + negated conditional + + + + + + ResidentKeyRequirement.java + + com.yubico.webauthn.data.ResidentKeyRequirement + + fromValue + + (Ljava/lang/String;)Ljava/util/Optional; + + 120 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 7 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + replaced return value with Optional.empty for com/yubico/webauthn/data/ResidentKeyRequirement::fromValue + + + + + + ResidentKeyRequirement.java + + com.yubico.webauthn.data.ResidentKeyRequirement + + lambda$fromJsonString$1 + + (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; + + 128 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 25 + + + + + + 3 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced return value with null for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromJsonString$1 + + + + + + ResidentKeyRequirement.java + + com.yubico.webauthn.data.ResidentKeyRequirement + + lambda$fromValue$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/ResidentKeyRequirement;)Z + + 120 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + replaced boolean return with false for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromValue$0 + + + + + + ResidentKeyRequirement.java + + com.yubico.webauthn.data.ResidentKeyRequirement + + lambda$fromValue$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/ResidentKeyRequirement;)Z + + 120 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.newResidentKeyOverridesOld(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + replaced boolean return with true for com/yubico/webauthn/data/ResidentKeyRequirement::lambda$fromValue$0 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step5 + + lambda$validate$0 + + (Ljava/util/List;)Z + + 169 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step5 + + lambda$validate$0 + + (Ljava/util/List;)Z + + 169 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 13 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$0 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step5 + + lambda$validate$1 + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)Z + + 173 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 10 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced boolean return with false for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$1 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step5 + + lambda$validate$1 + + (Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor;)Z + + 173 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 10 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced boolean return with true for com/yubico/webauthn/FinishAssertionSteps$Step5::lambda$validate$1 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step5 + + lambda$validate$2 + + (Ljava/util/List;)V + + 172 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 24 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step5 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step6; + + 161 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step5::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step5 + + validate + + ()V + + 170 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 20 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to java/util/Optional::ifPresent + + + + + + AuthenticatorAttestationResponse.java + + com.yubico.webauthn.data.AuthenticatorAttestationResponse + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V + + 106 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AuthenticatorAttestationResponse.java + + com.yubico.webauthn.data.AuthenticatorAttestationResponse + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V + + 107 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AuthenticatorAttestationResponse.java + + com.yubico.webauthn.data.AuthenticatorAttestationResponse + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Ljava/util/Set;)V + + 113 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 41 + + + + + + 7 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AuthenticatorAttestationResponse.java + + com.yubico.webauthn.data.AuthenticatorAttestationResponse + + builder + + ()Lcom/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages; + + 130 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::builder + + + + + + AuthenticatorAttestationResponse.java + + com.yubico.webauthn.data.AuthenticatorAttestationResponse + + getAuthenticatorData + + ()Lcom/yubico/webauthn/data/ByteArray; + + 100 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::getAuthenticatorData + + + + + + AuthenticatorAttestationResponse.java + + com.yubico.webauthn.data.AuthenticatorAttestationResponse + + getParsedAuthenticatorData + + ()Lcom/yubico/webauthn/data/AuthenticatorData; + + 126 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse::getParsedAuthenticatorData + + + + + + AuthenticatorAttachment.java + + com.yubico.webauthn.data.AuthenticatorAttachment + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorAttachment; + + 92 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + AuthenticatorAttachment.java + + com.yubico.webauthn.data.AuthenticatorAttachment + + fromJsonString + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/AuthenticatorAttachment; + + 93 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 18 + + + + + + 5 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttachment::fromJsonString + + + + + + AuthenticatorAttachment.java + + com.yubico.webauthn.data.AuthenticatorAttachment + + fromValue + + (Ljava/lang/String;)Ljava/util/Optional; + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.EnumsSpec + + negated conditional + + + + + + AuthenticatorAttachment.java + + com.yubico.webauthn.data.AuthenticatorAttachment + + fromValue + + (Ljava/lang/String;)Ljava/util/Optional; + + 88 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 7 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAttachment::fromValue + + + + + + AuthenticatorAttachment.java + + com.yubico.webauthn.data.AuthenticatorAttachment + + lambda$fromValue$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/AuthenticatorAttachment;)Z + + 88 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.JsonIoSpec + + replaced boolean return with false for com/yubico/webauthn/data/AuthenticatorAttachment::lambda$fromValue$0 + + + + + + AuthenticatorAttachment.java + + com.yubico.webauthn.data.AuthenticatorAttachment + + lambda$fromValue$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/data/AuthenticatorAttachment;)Z + + 88 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.EnumsSpec + + replaced boolean return with true for com/yubico/webauthn/data/AuthenticatorAttachment::lambda$fromValue$0 + + + + + + CredentialRepositoryV1ToV2Adapter.java + + com.yubico.webauthn.CredentialRepositoryV1ToV2Adapter + + credentialIdExists + + (Lcom/yubico/webauthn/data/ByteArray;)Z + + 31 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + CredentialRepositoryV1ToV2Adapter.java + + com.yubico.webauthn.CredentialRepositoryV1ToV2Adapter + + credentialIdExists + + (Lcom/yubico/webauthn/data/ByteArray;)Z + + 31 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 16 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced boolean return with true for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::credentialIdExists + + + + + + CredentialRepositoryV1ToV2Adapter.java + + com.yubico.webauthn.CredentialRepositoryV1ToV2Adapter + + getCredentialDescriptorsForUserHandle + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Set; + + 18 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 25 + + + + + + 4 + + + + + + replaced return value with Collections.emptySet for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getCredentialDescriptorsForUserHandle + + + + + + CredentialRepositoryV1ToV2Adapter.java + + com.yubico.webauthn.CredentialRepositoryV1ToV2Adapter + + getUserHandleForUsername + + (Ljava/lang/String;)Ljava/util/Optional; + + 36 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getUserHandleForUsername + + + + + + CredentialRepositoryV1ToV2Adapter.java + + com.yubico.webauthn.CredentialRepositoryV1ToV2Adapter + + getUsernameForUserHandle + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 41 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::getUsernameForUserHandle + + + + + + CredentialRepositoryV1ToV2Adapter.java + + com.yubico.webauthn.CredentialRepositoryV1ToV2Adapter + + lookup + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 26 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/CredentialRepositoryV1ToV2Adapter::lookup + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps + + begin + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step5; + + 109 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::begin + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps + + fromV1 + + (Lcom/yubico/webauthn/RelyingParty;Lcom/yubico/webauthn/FinishAssertionOptions;)Lcom/yubico/webauthn/FinishAssertionSteps; + + 75 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 62 + + + + + + 14 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::fromV1 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps + + getUsernameForUserHandle + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/util/Optional; + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps::getUsernameForUserHandle + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps + + lambda$getUsernameForUserHandle$0 + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/UsernameRepository;)Ljava/util/Optional; + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps::lambda$getUsernameForUserHandle$0 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps + + run + + ()Lcom/yubico/webauthn/AssertionResult; + + 113 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::run + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps + + runV2 + + ()Lcom/yubico/webauthn/AssertionResultV2; + + 117 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps::runV2 + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilder + + appid + + (Lcom/yubico/webauthn/extension/appid/AppId;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder; + + 153 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest) + + replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::appid + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilder + + appid + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder; + + 126 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest) + + negated conditional + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilder + + appid + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder; + + 127 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.data.AssertionExtensionInputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AssertionExtensionInputsTest) + + replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::appid + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilder + + largeBlob + + (Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationInput;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder; + + 172 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::largeBlob + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilder + + uvm + + ()Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder; + + 183 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::uvm + + + + + + AssertionExtensionInputs.java + + com.yubico.webauthn.data.AssertionExtensionInputs$AssertionExtensionInputsBuilder + + uvm + + (Ljava/lang/Boolean;)Lcom/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder; + + 189 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AssertionExtensionInputs$AssertionExtensionInputsBuilder::uvm + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step + + next + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step; + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/webauthn/FinishRegistrationSteps$Step::validate + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step + + next + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step; + + 142 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::next + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step + + run + + ()Lcom/yubico/webauthn/RegistrationResult; + + 146 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step + + run + + ()Lcom/yubico/webauthn/RegistrationResult; + + 147 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 13 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::run + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step + + run + + ()Lcom/yubico/webauthn/RegistrationResult; + + 149 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 20 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step::run + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder + + certStore + + (Ljava/security/cert/CertStore;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder; + + 233 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::certStore + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder + + enableRevocationChecking + + (Z)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder; + + 246 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::enableRevocationChecking + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder + + policyTreeValidator + + (Ljava/util/function/Predicate;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder; + + 276 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::policyTreeValidator + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder + + trustRoots + + (Ljava/util/Set;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder; + + 210 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder + + trustRoots + + (Ljava/util/Set;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder; + + 214 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 21 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder::trustRoots + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms; + + 592 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 15 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms; + + 596 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 40 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms; + + 592 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 35 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms; + + 596 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 60 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccParms + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms; + + 604 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 78 + + + + + + 15 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccParms::parse + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V + + 88 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V + + 89 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse + + builder + + ()Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages; + + 111 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse::builder + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse + + getUserHandle + + ()Ljava/util/Optional; + + 107 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/AuthenticatorAssertionResponse::getUserHandle + + + + + + VersionInfo.java + + com.yubico.webauthn.meta.VersionInfo + + findValueInManifest + + (Ljava/lang/String;)Ljava/lang/String; + + 82 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 16 + + + + + + 5 + + + + + + negated conditional + + + + + + VersionInfo.java + + com.yubico.webauthn.meta.VersionInfo + + findValueInManifest + + (Ljava/lang/String;)Ljava/lang/String; + + 86 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 41 + + + + + + 12 + + + + + + negated conditional + + + + + + VersionInfo.java + + com.yubico.webauthn.meta.VersionInfo + + findValueInManifest + + (Ljava/lang/String;)Ljava/lang/String; + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 48 + + + + + + 15 + + + + + + replaced return value with "" for com/yubico/webauthn/meta/VersionInfo::findValueInManifest + + + + + + VersionInfo.java + + com.yubico.webauthn.meta.VersionInfo + + getInstance + + ()Lcom/yubico/webauthn/meta/VersionInfo; + + 49 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + VersionInfo.java + + com.yubico.webauthn.meta.VersionInfo + + getInstance + + ()Lcom/yubico/webauthn/meta/VersionInfo; + + 57 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 29 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/meta/VersionInfo::getInstance + + + + + + ClientAssertionExtensionOutputs.java + + com.yubico.webauthn.data.ClientAssertionExtensionOutputs + + getAppid + + ()Ljava/util/Optional; + + 100 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with Optional.empty for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getAppid + + + + + + ClientAssertionExtensionOutputs.java + + com.yubico.webauthn.data.ClientAssertionExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 11 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + ClientAssertionExtensionOutputs.java + + com.yubico.webauthn.data.ClientAssertionExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 84 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 23 + + + + + + 4 + + + + com.yubico.webauthn.data.ExtensionsSpec + + negated conditional + + + + + + ClientAssertionExtensionOutputs.java + + com.yubico.webauthn.data.ClientAssertionExtensionOutputs + + getExtensionIds + + ()Ljava/util/Set; + + 87 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 34 + + + + + + 7 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Collections.emptySet for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getExtensionIds + + + + + + ClientAssertionExtensionOutputs.java + + com.yubico.webauthn.data.ClientAssertionExtensionOutputs + + getLargeBlob + + ()Ljava/util/Optional; + + 114 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/ClientAssertionExtensionOutputs::getLargeBlob + + + + + + AttestedCredentialData.java + + com.yubico.webauthn.data.AttestedCredentialData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V + + 60 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestedCredentialData.java + + com.yubico.webauthn.data.AttestedCredentialData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V + + 61 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestedCredentialData.java + + com.yubico.webauthn.data.AttestedCredentialData + + <init> + + (Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;Lcom/yubico/webauthn/data/ByteArray;)V + + 62 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + negated conditional + + + + + + AttestedCredentialData.java + + com.yubico.webauthn.data.AttestedCredentialData + + builder + + ()Lcom/yubico/webauthn/data/AttestedCredentialData$AttestedCredentialDataBuilder; + + 69 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + replaced return value with null for com/yubico/webauthn/data/AttestedCredentialData::builder + + + + + + FinishAssertionOptions.java + + com.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuilder + + callerTokenBindingId + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder; + + 164 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + FinishAssertionOptions.java + + com.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuilder + + callerTokenBindingId + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder; + + 165 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder::callerTokenBindingId + + + + + + FinishAssertionOptions.java + + com.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuilder + + callerTokenBindingId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder; + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + FinishAssertionOptions.java + + com.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuilder + + callerTokenBindingId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder; + + 154 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder::callerTokenBindingId + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions + + getTimeout + + ()Ljava/util/Optional; + + 162 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getTimeout + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions + + getUserHandle + + ()Ljava/util/Optional; + + 133 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUserHandle + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions + + getUserVerification + + ()Ljava/util/Optional; + + 148 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUserVerification + + + + + + StartAssertionOptions.java + + com.yubico.webauthn.StartAssertionOptions + + getUsername + + ()Ljava/util/Optional; + + 105 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/StartAssertionOptions::getUsername + + + + + + FinishRegistrationOptions.java + + com.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuilder + + callerTokenBindingId + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder; + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + FinishRegistrationOptions.java + + com.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuilder + + callerTokenBindingId + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder; + + 132 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 17 + + + + + + 5 + + + + + + replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder::callerTokenBindingId + + + + + + FinishRegistrationOptions.java + + com.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuilder + + callerTokenBindingId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder; + + 119 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationOptions.java + + com.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuilder + + callerTokenBindingId + + (Ljava/util/Optional;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder; + + 121 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder::callerTokenBindingId + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step6 + + clientData + + ()Lcom/yubico/webauthn/data/CollectedClientData; + + 171 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step6::clientData + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step6 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step7; + + 167 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step6::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step6 + + validate + + ()V + + 162 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step6 + + validate + + ()V + + 162 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 16 + + + + + + 4 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step11 + + clientDataJsonHash + + ()Lcom/yubico/webauthn/data/ByteArray; + + 256 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step11::clientDataJsonHash + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step11 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step12; + + 252 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step11::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step11 + + validate + + ()V + + 247 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step11 + + validate + + ()V + + 247 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 18 + + + + + + 5 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step12 + + attestation + + ()Lcom/yubico/webauthn/data/AttestationObject; + + 275 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step12::attestation + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step12 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step13; + + 271 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step12::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step12 + + validate + + ()V + + 266 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step12 + + validate + + ()V + + 266 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 16 + + + + + + 4 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + UserIdentity.java + + com.yubico.webauthn.data.UserIdentity + + <init> + + (Ljava/lang/String;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V + + 106 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest) + + negated conditional + + + + + + UserIdentity.java + + com.yubico.webauthn.data.UserIdentity + + <init> + + (Ljava/lang/String;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V + + 107 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest) + + negated conditional + + + + + + UserIdentity.java + + com.yubico.webauthn.data.UserIdentity + + <init> + + (Ljava/lang/String;Ljava/lang/String;Lcom/yubico/webauthn/data/ByteArray;)V + + 108 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest) + + negated conditional + + + + + + UserIdentity.java + + com.yubico.webauthn.data.UserIdentity + + builder + + ()Lcom/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages; + + 115 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest) + + replaced return value with null for com/yubico/webauthn/data/UserIdentity::builder + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step20 + + lambda$validate$0 + + (Lcom/yubico/webauthn/data/ByteArray;)Ljava/lang/IllegalArgumentException; + + 589 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 18 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::lambda$validate$0 + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step20 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step21; + + 599 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step20 + + signedBytes + + ()Lcom/yubico/webauthn/data/ByteArray; + + 603 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step20::signedBytes + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step20 + + validate + + ()V + + 592 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 84 + + + + + + 18 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step16 + + lambda$validate$0 + + (ILcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z + + 359 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step16 + + lambda$validate$0 + + (ILcom/yubico/webauthn/data/PublicKeyCredentialParameters;)Z + + 359 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with true for com/yubico/webauthn/FinishRegistrationSteps$Step16::lambda$validate$0 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step16 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step18; + + 374 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step16::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step16 + + validate + + ()V + + 357 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 87 + + + + + + 23 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step10 + + clientData + + ()Lcom/yubico/webauthn/data/CollectedClientData; + + 345 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step10::clientData + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step10 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step11; + + 341 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step10::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step10 + + validate + + ()V + + 336 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step10 + + validate + + ()V + + 336 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 16 + + + + + + 4 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step15 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step16; + + 458 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step15::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step15 + + validate + + ()V + + 445 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 47 + + + + + + 14 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step15 + + validate + + ()V + + 438 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 24 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step15 + + validate + + ()V + + 446 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 72 + + + + + + 23 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step19 + + clientDataJsonHash + + ()Lcom/yubico/webauthn/data/ByteArray; + + 558 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step19::clientDataJsonHash + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step19 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step20; + + 554 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step19::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step19 + + validate + + ()V + + 549 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step19 + + validate + + ()V + + 549 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 18 + + + + + + 5 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + ClientAssertionExtensionOutputs.java + + com.yubico.webauthn.data.ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder + + appid + + (Ljava/lang/Boolean;)Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder; + + 139 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.data.BuildersSpec + + replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid + + + + + + ClientAssertionExtensionOutputs.java + + com.yubico.webauthn.data.ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder + + appid + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder; + + 129 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest) + + negated conditional + + + + + + ClientAssertionExtensionOutputs.java + + com.yubico.webauthn.data.ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder + + appid + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder; + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest) + + replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid + + + + + + ClientAssertionExtensionOutputs.java + + com.yubico.webauthn.data.ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder + + appid + + (Z)Lcom/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder; + + 153 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 3 + + + + com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.ClientAssertionExtensionOutputsTest) + + replaced return value with null for com/yubico/webauthn/data/ClientAssertionExtensionOutputs$ClientAssertionExtensionOutputsBuilder::appid + + + + + + DocumentStatus.java + + com.yubico.webauthn.meta.DocumentStatus + + fromString + + (Ljava/lang/String;)Ljava/util/Optional; + + 53 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + DocumentStatus.java + + com.yubico.webauthn.meta.DocumentStatus + + fromString + + (Ljava/lang/String;)Ljava/util/Optional; + + 54 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 7 + + + + + + replaced return value with Optional.empty for com/yubico/webauthn/meta/DocumentStatus::fromString + + + + + + DocumentStatus.java + + com.yubico.webauthn.meta.DocumentStatus + + lambda$fromString$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/meta/DocumentStatus;)Z + + 54 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced boolean return with false for com/yubico/webauthn/meta/DocumentStatus::lambda$fromString$0 + + + + + + DocumentStatus.java + + com.yubico.webauthn.meta.DocumentStatus + + lambda$fromString$0 + + (Ljava/lang/String;Lcom/yubico/webauthn/meta/DocumentStatus;)Z + + 54 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced boolean return with true for com/yubico/webauthn/meta/DocumentStatus::lambda$fromString$0 + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationOutput + + getBlob + + ()Ljava/util/Optional; + + 418 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::getBlob + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationOutput + + getWritten + + ()Ljava/util/Optional; + + 435 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::getWritten + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationOutput + + read + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput; + + 385 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::read + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobAuthenticationOutput + + write + + (Z)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput; + + 401 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobAuthenticationOutput::write + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$PendingStep16 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step18; + + 524 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$PendingStep16::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$PendingStep16 + + validate + + ()V + + 513 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 9 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$PendingStep16 + + validate + + ()V + + 515 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 10 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$PendingStep16 + + validate + + ()V + + 512 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 73 + + + + + + 20 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder + + transports + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder; + + 150 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder + + transports + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder; + + 151 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder::transports + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder + + transports + + (Ljava/util/Set;)Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder; + + 163 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder::transports + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps + + begin + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step6; + + 124 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::begin + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps + + fromV1 + + (Lcom/yubico/webauthn/RelyingParty;Lcom/yubico/webauthn/FinishRegistrationOptions;)Lcom/yubico/webauthn/FinishRegistrationSteps; + + 94 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 56 + + + + + + 14 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::fromV1 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps + + run + + ()Lcom/yubico/webauthn/RegistrationResult; + + 128 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps::run + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder + + userHandle + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder; + + 177 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder::userHandle + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder + + userHandle + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder; + + 165 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder + + userHandle + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder; + + 166 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder::userHandle + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Finished + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Finished; + + 655 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Finished::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Finished + + result + + ()Ljava/util/Optional; + + 660 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 26 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Finished::result + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Finished + + resultV2 + + ()Ljava/util/Optional; + + 670 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionSteps$Finished::resultV2 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step22 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Finished; + + 656 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step22::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step22 + + validate + + ()V + + 649 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 13 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step22 + + validate + + ()V + + 648 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 35 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder + + publicKeyCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder; + + 407 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder + + publicKeyCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder; + + 409 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder::publicKeyCose + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder + + publicKeyEs256Raw + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder; + + 429 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder::publicKeyEs256Raw + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder + + authenticatorAttachment + + (Lcom/yubico/webauthn/data/AuthenticatorAttachment;)Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder; + + 223 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 0 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder::authenticatorAttachment + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder + + authenticatorAttachment + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder; + + 210 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + negated conditional + + + + + + AuthenticatorSelectionCriteria.java + + com.yubico.webauthn.data.AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder + + authenticatorAttachment + + (Ljava/util/Optional;)Lcom/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder; + + 211 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 5 + + + + com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.AuthenticatorSelectionCriteriaTest) + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorSelectionCriteria$AuthenticatorSelectionCriteriaBuilder::authenticatorAttachment + + + + + + PublicKeyCredentialParameters.java + + com.yubico.webauthn.data.PublicKeyCredentialParameters + + <init> + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 55 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.data.BuildersSpec + + negated conditional + + + + + + PublicKeyCredentialParameters.java + + com.yubico.webauthn.data.PublicKeyCredentialParameters + + <init> + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;Lcom/yubico/webauthn/data/PublicKeyCredentialType;)V + + 56 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.data.BuildersSpec + + negated conditional + + + + + + PublicKeyCredentialParameters.java + + com.yubico.webauthn.data.PublicKeyCredentialParameters + + builder + + ()Lcom/yubico/webauthn/data/PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder$MandatoryStages; + + 118 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.BuildersSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialParameters::builder + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions + + builder + + ()Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder$MandatoryStages; + + 90 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/StartRegistrationOptions::builder + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions + + getAuthenticatorSelection + + ()Ljava/util/Optional; + + 72 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/StartRegistrationOptions::getAuthenticatorSelection + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions + + getTimeout + + ()Ljava/util/Optional; + + 86 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyStartOperationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/StartRegistrationOptions::getTimeout + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step15 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step16; + + 336 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step15::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step15 + + validate + + ()V + + 326 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + negated conditional + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step15 + + validate + + ()V + + 328 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 36 + + + + + + 9 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step11 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step12; + + 368 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step11::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step11 + + validate + + ()V + + 358 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step11 + + validate + + ()V + + 359 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 41 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step17 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$PendingStep16; + + 499 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step17::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step17 + + validate + + ()V + + 490 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 17 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + negated conditional + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step17 + + validate + + ()V + + 491 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 35 + + + + + + 10 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + RelyingPartyIdentity.java + + com.yubico.webauthn.data.RelyingPartyIdentity + + <init> + + (Ljava/lang/String;Ljava/lang/String;)V + + 70 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest) + + negated conditional + + + + + + RelyingPartyIdentity.java + + com.yubico.webauthn.data.RelyingPartyIdentity + + <init> + + (Ljava/lang/String;Ljava/lang/String;)V + + 70 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 15 + + + + + + 4 + + + + com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest) + + negated conditional + + + + + + RelyingPartyIdentity.java + + com.yubico.webauthn.data.RelyingPartyIdentity + + builder + + ()Lcom/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages; + + 76 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest) + + replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity::builder + + + + + + CredentialRecord.java + + com.yubico.webauthn.CredentialRecord + + cosePublicKeyFromEs256Raw + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/ByteArray; + + 223 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 5 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with null for com/yubico/webauthn/CredentialRecord::cosePublicKeyFromEs256Raw + + + + + + CredentialRecord.java + + com.yubico.webauthn.CredentialRecord + + toPublicKeyCredentialDescriptor + + ()Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor; + + 195 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 6 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/CredentialRecord::toPublicKeyCredentialDescriptor + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsAttest + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest; + + 668 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 33 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsAttest + + parse + + ([B)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsAttest; + + 675 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 59 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionOptions.java + + com.yubico.webauthn.FinishAssertionOptions + + builder + + ()Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages; + + 110 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionOptions::builder + + + + + + FinishAssertionOptions.java + + com.yubico.webauthn.FinishAssertionOptions + + getCallerTokenBindingId + + ()Ljava/util/Optional; + + 106 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishAssertionOptions::getCallerTokenBindingId + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2 + + credentialRepository + + (Lcom/yubico/webauthn/CredentialRepository;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder; + + 612 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2::credentialRepository + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2 + + credentialRepositoryV2 + + (Lcom/yubico/webauthn/CredentialRepositoryV2;)Lcom/yubico/webauthn/RelyingPartyV2$RelyingPartyV2Builder; + + 632 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2::credentialRepositoryV2 + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step7 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step8; + + 190 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step7::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step7 + + validate + + ()V + + 181 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 27 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step9 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step10; + + 224 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step9::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step9 + + validate + + ()V + + 216 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 31 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step8 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step9; + + 205 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step8::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step8 + + validate + + ()V + + 200 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 14 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishRegistrationOptions.java + + com.yubico.webauthn.FinishRegistrationOptions + + builder + + ()Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages; + + 75 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions::builder + + + + + + FinishRegistrationOptions.java + + com.yubico.webauthn.FinishRegistrationOptions + + getCallerTokenBindingId + + ()Ljava/util/Optional; + + 71 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationOptions::getCallerTokenBindingId + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step13 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step14; + + 294 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step13::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step13 + + validate + + ()V + + 286 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 25 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step14 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step15; + + 312 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step14::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step14 + + validate + + ()V + + 305 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1 + + trustRoots + + (Ljava/util/Set;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder; + + 197 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + negated conditional + + + + + + AttestationTrustSource.java + + com.yubico.webauthn.attestation.AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1 + + trustRoots + + (Ljava/util/Set;)Lcom/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder; + + 198 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 18 + + + + + + 5 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/attestation/AttestationTrustSource$TrustRootsResult$TrustRootsResultBuilder$Step1::trustRoots + + + + + + NoneAttestationStatementVerifier.java + + com.yubico.webauthn.NoneAttestationStatementVerifier + + getAttestationType + + (Lcom/yubico/webauthn/data/AttestationObject;)Lcom/yubico/webauthn/data/AttestationType; + + 35 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/NoneAttestationStatementVerifier::getAttestationType + + + + + + NoneAttestationStatementVerifier.java + + com.yubico.webauthn.NoneAttestationStatementVerifier + + verifyAttestationSignature + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/yubico/webauthn/data/ByteArray;)Z + + 41 + + org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced boolean return with false for com/yubico/webauthn/NoneAttestationStatementVerifier::verifyAttestationSignature + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3 + + publicKeyCose + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder; + + 362 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3::publicKeyCose + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3 + + publicKeyEs256Raw + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder; + + 381 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 9 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyAssertionSpec + + replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3::publicKeyEs256Raw + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step12 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step13; + + 389 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step12::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step12 + + validate + + ()V + + 379 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 29 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step13 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step14; + + 409 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step13::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step13 + + validate + + ()V + + 401 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 35 + + + + + + 8 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step16 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step17; + + 476 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step16::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step16 + + validate + + ()V + + 469 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 18 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Finished + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Finished; + + 676 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Finished::nextStep + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Finished + + result + + ()Ljava/util/Optional; + + 681 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 20 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with Optional.empty for com/yubico/webauthn/FinishRegistrationSteps$Finished::result + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step7 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step8; + + 283 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step7::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step7 + + validate + + ()V + + 288 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 27 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyV2AssertionSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + AndroidSafetynetAttestationStatementVerifier.java + + com.yubico.webauthn.AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom + + getX5c + + (Lcom/fasterxml/jackson/databind/JsonNode;)Ljava/util/List; + + 186 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 38 + + + + + + 11 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with Collections.emptyList for com/yubico/webauthn/AndroidSafetynetAttestationStatementVerifier$JsonWebSignatureCustom::getX5c + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$TpmsEccPoint + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccPoint; + + 625 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 28 + + + + + + 7 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$TpmsEccPoint::parse + + + + + + PublicKeyCredentialParameters.java + + com.yubico.webauthn.data.PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder$MandatoryStages + + alg + + (Lcom/yubico/webauthn/data/COSEAlgorithmIdentifier;)Lcom/yubico/webauthn/data/PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder; + + 133 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.BuildersSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialParameters$PublicKeyCredentialParametersBuilder$MandatoryStages::alg + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages + + id + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step2; + + 164 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages::id + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step4 + + pubKeyCredParams + + (Ljava/util/List;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder; + + 290 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step4::pubKeyCredParams + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step3 + + challenge + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step4; + + 277 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 3 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step3::challenge + + + + + + AttestationObject.java + + com.yubico.webauthn.data.AttestationObject$JsonSerializer + + serialize + + (Lcom/yubico/webauthn/data/AttestationObject;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V + + 167 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.data.JsonIoSpec + + removed call to com/fasterxml/jackson/core/JsonGenerator::writeString + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step2 + + user + + (Lcom/yubico/webauthn/data/UserIdentity;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step3; + + 264 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 3 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step2::user + + + + + + FinishAssertionOptions.java + + com.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages + + request + + (Lcom/yubico/webauthn/AssertionRequest;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages$Step2; + + 127 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages::request + + + + + + PublicKeyCredentialDescriptor.java + + com.yubico.webauthn.data.PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder$MandatoryStages + + id + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder; + + 138 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialDescriptor$PublicKeyCredentialDescriptorBuilder$MandatoryStages::id + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages + + authenticatorData + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step2; + + 129 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages::authenticatorData + + + + + + RelyingParty.java + + com.yubico.webauthn.RelyingParty$RelyingPartyBuilder$MandatoryStages + + identity + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;)Lcom/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages$Step2; + + 600 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyTest.doesNotLogWarningIfAllAlgorithmsAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/RelyingParty$RelyingPartyBuilder$MandatoryStages::identity + + + + + + RelyingPartyIdentity.java + + com.yubico.webauthn.data.RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages$Step2 + + name + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder; + + 110 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest) + + replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages$Step2::name + + + + + + AppId.java + + com.yubico.webauthn.extension.appid.AppId$JsonSerializer + + serialize + + (Lcom/yubico/webauthn/extension/appid/AppId;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V + + 115 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.extension.appid.AppIdTest.jsonEncode(com.yubico.webauthn.extension.appid.AppIdTest) + + removed call to com/fasterxml/jackson/core/JsonGenerator::writeString + + + + + + UserIdentity.java + + com.yubico.webauthn.data.UserIdentity$UserIdentityBuilder$MandatoryStages$Step3 + + id + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/UserIdentity$UserIdentityBuilder; + + 152 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest) + + replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step3::id + + + + + + UserIdentity.java + + com.yubico.webauthn.data.UserIdentity$UserIdentityBuilder$MandatoryStages$Step2 + + displayName + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step3; + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 3 + + + + com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest) + + replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step2::displayName + + + + + + AuthenticatorResponse.java + + com.yubico.webauthn.data.AuthenticatorResponse + + getParsedAuthenticatorData + + ()Lcom/yubico/webauthn/data/AuthenticatorData; + + 48 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorResponse::getParsedAuthenticatorData + + + + + + TpmAttestationStatementVerifier.java + + com.yubico.webauthn.TpmAttestationStatementVerifier$Tpm2bPublicKeyRsa + + parse + + (Lcom/yubico/internal/util/ByteInputStream;)Lcom/yubico/webauthn/TpmAttestationStatementVerifier$Tpm2bPublicKeyRsa; + + 581 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 13 + + + + + + 4 + + + + com.yubico.webauthn.RelyingPartyV2RegistrationSpec + + replaced return value with null for com/yubico/webauthn/TpmAttestationStatementVerifier$Tpm2bPublicKeyRsa::parse + + + + + + RelyingPartyIdentity.java + + com.yubico.webauthn.data.RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages + + id + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages$Step2; + + 98 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.data.RelyingPartyIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.RelyingPartyIdentityTest) + + replaced return value with null for com/yubico/webauthn/data/RelyingPartyIdentity$RelyingPartyIdentityBuilder$MandatoryStages::id + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step3 + + clientExtensionResults + + (Lcom/yubico/webauthn/data/ClientExtensionOutputs;)Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder; + + 188 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step3::clientExtensionResults + + + + + + AssertionRequest.java + + com.yubico.webauthn.AssertionRequest$AssertionRequestBuilder$MandatoryStages + + publicKeyCredentialRequestOptions + + (Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions;)Lcom/yubico/webauthn/AssertionRequest$AssertionRequestBuilder; + + 218 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/AssertionRequest$AssertionRequestBuilder$MandatoryStages::publicKeyCredentialRequestOptions + + + + + + FinishRegistrationOptions.java + + com.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages$Step2 + + response + + (Lcom/yubico/webauthn/data/PublicKeyCredential;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder; + + 107 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages$Step2::response + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobRegistrationInput$LargeBlobSupport + + values + + ()Ljava/util/Set; + + 210 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 17 + + + + + + 3 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Collections.emptySet for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationInput$LargeBlobSupport::values + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step2 + + response + + (Lcom/yubico/webauthn/data/AuthenticatorResponse;)Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step3; + + 176 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages$Step2::response + + + + + + UserIdentity.java + + com.yubico.webauthn.data.UserIdentity$UserIdentityBuilder$MandatoryStages + + name + + (Ljava/lang/String;)Lcom/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages$Step2; + + 130 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.data.UserIdentityTest.itHasTheseBuilderMethods(com.yubico.webauthn.data.UserIdentityTest) + + replaced return value with null for com/yubico/webauthn/data/UserIdentity$UserIdentityBuilder$MandatoryStages::name + + + + + + CollectedClientData.java + + com.yubico.webauthn.data.CollectedClientData$JsonSerializer + + serialize + + (Lcom/yubico/webauthn/data/CollectedClientData;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V + + 148 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.data.JsonIoSpec + + removed call to com/fasterxml/jackson/core/JsonGenerator::writeString + + + + + + PublicKeyCredentialCreationOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages + + rp + + (Lcom/yubico/webauthn/data/RelyingPartyIdentity;)Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages$Step2; + + 252 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.data.PublicKeyCredentialCreationOptionsTest) + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialCreationOptions$PublicKeyCredentialCreationOptionsBuilder$MandatoryStages::rp + + + + + + StartRegistrationOptions.java + + com.yubico.webauthn.StartRegistrationOptions$StartRegistrationOptionsBuilder$MandatoryStages + + user + + (Lcom/yubico/webauthn/data/UserIdentity;)Lcom/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder; + + 106 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyTest.filtersAlgorithmsToThoseAvailable(com.yubico.webauthn.RelyingPartyTest) + + replaced return value with null for com/yubico/webauthn/StartRegistrationOptions$StartRegistrationOptionsBuilder$MandatoryStages::user + + + + + + AuthenticatorData.java + + com.yubico.webauthn.data.AuthenticatorData$JsonSerializer + + serialize + + (Lcom/yubico/webauthn/data/AuthenticatorData;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V + + 268 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 7 + + + + + + 2 + + + + com.yubico.webauthn.data.JsonIoSpec + + removed call to com/fasterxml/jackson/core/JsonGenerator::writeString + + + + + + FinishAssertionOptions.java + + com.yubico.webauthn.FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages$Step2 + + response + + (Lcom/yubico/webauthn/data/PublicKeyCredential;)Lcom/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder; + + 140 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionOptions$FinishAssertionOptionsBuilder$MandatoryStages$Step2::response + + + + + + FinishRegistrationSteps.java + + com.yubico.webauthn.FinishRegistrationSteps$Step10 + + nextStep + + ()Lcom/yubico/webauthn/FinishRegistrationSteps$Step11; + + 239 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationSteps$Step10::nextStep + + + + + + AuthenticatorAttestationResponse.java + + com.yubico.webauthn.data.AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages + + attestationObject + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages$Step2; + + 146 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages::attestationObject + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step2 + + userHandle + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step3; + + 336 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step2::userHandle + + + + + + FinishRegistrationOptions.java + + com.yubico.webauthn.FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages + + request + + (Lcom/yubico/webauthn/data/PublicKeyCredentialCreationOptions;)Lcom/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages$Step2; + + 93 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyCeremoniesSpec + + replaced return value with null for com/yubico/webauthn/FinishRegistrationOptions$FinishRegistrationOptionsBuilder$MandatoryStages::request + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$CredentialProperties$CredentialPropertiesOutput + + getRk + + ()Ljava/util/Optional; + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 6 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with Optional.empty for com/yubico/webauthn/data/Extensions$CredentialProperties$CredentialPropertiesOutput::getRk + + + + + + Specification.java + + com.yubico.webauthn.meta.Specification + + builder + + ()Lcom/yubico/webauthn/meta/Specification$SpecificationBuilder; + + 53 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/webauthn/meta/Specification::builder + + + + + + RegisteredCredential.java + + com.yubico.webauthn.RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages + + credentialId + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages$Step2; + + 324 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/RegisteredCredential$RegisteredCredentialBuilder$MandatoryStages::credentialId + + + + + + AuthenticatorAttestationResponse.java + + com.yubico.webauthn.data.AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages$Step2 + + clientDataJSON + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder; + + 157 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.data.AuthenticatorAttestationResponseSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAttestationResponse$AuthenticatorAttestationResponseBuilder$MandatoryStages$Step2::clientDataJSON + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step14 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step15; + + 426 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step14::nextStep + + + + + + FinishAssertionSteps.java + + com.yubico.webauthn.FinishAssertionSteps$Step18 + + nextStep + + ()Lcom/yubico/webauthn/FinishAssertionSteps$Step19; + + 538 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 12 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/FinishAssertionSteps$Step18::nextStep + + + + + + PublicKeyCredential.java + + com.yubico.webauthn.data.PublicKeyCredential$PublicKeyCredentialBuilder + + start + + ()Lcom/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder$MandatoryStages; + + 150 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredential$PublicKeyCredentialBuilder::start + + + + + + PublicKeyCredentialRequestOptions.java + + com.yubico.webauthn.data.PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder$MandatoryStages + + challenge + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder; + + 183 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/PublicKeyCredentialRequestOptions$PublicKeyCredentialRequestOptionsBuilder$MandatoryStages::challenge + + + + + + Extensions.java + + com.yubico.webauthn.data.Extensions$LargeBlob$LargeBlobRegistrationOutput + + supported + + (Z)Lcom/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationOutput; + + 349 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.webauthn.data.ExtensionsSpec + + replaced return value with null for com/yubico/webauthn/data/Extensions$LargeBlob$LargeBlobRegistrationOutput::supported + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step2 + + clientDataJSON + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step3; + + 141 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 16 + + + + + + 3 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step2::clientDataJSON + + + + + + AuthenticatorAssertionResponse.java + + com.yubico.webauthn.data.AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step3 + + signature + + (Lcom/yubico/webauthn/data/ByteArray;)Lcom/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder; + + 153 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.webauthn.RelyingPartyUserIdentificationSpec + + replaced return value with null for com/yubico/webauthn/data/AuthenticatorAssertionResponse$AuthenticatorAssertionResponseBuilder$MandatoryStages$Step3::signature + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + copy + + ([B)[B + + 36 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/internal/util/BinaryUtil::copy + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint16 + + (I)[B + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 4 + + + + + + 0 + + + + com.yubico.internal.util.BinaryUtilSpec + + changed conditional boundary + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint16 + + (I)[B + + 132 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 25 + + + + + + 5 + + + + + + changed conditional boundary + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint16 + + (I)[B + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.internal.util.BinaryUtilSpec + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint16 + + (I)[B + + 132 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 5 + + + + com.yubico.internal.util.BinaryUtilSpec + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint16 + + (I)[B + + 131 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 20 + + + + + + 4 + + + + com.yubico.internal.util.BinaryUtilSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint16 + + (I)[B + + 132 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 45 + + + + + + 9 + + + + com.yubico.internal.util.BinaryUtilSpec + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint16 + + (I)[B + + 139 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 75 + + + + + + 16 + + + + com.yubico.internal.util.BinaryUtilSpec + + replaced return value with null for com/yubico/internal/util/BinaryUtil::encodeUint16 + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint32 + + (J)[B + + 143 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 6 + + + + + + 0 + + + + + + changed conditional boundary + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint32 + + (J)[B + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 28 + + + + + + 5 + + + + + + changed conditional boundary + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint32 + + (J)[B + + 143 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 0 + + + + + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint32 + + (J)[B + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 28 + + + + + + 5 + + + + + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint32 + + (J)[B + + 143 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 22 + + + + + + 4 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint32 + + (J)[B + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 48 + + + + + + 9 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + encodeUint32 + + (J)[B + + 151 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 78 + + + + + + 16 + + + + + + replaced return value with null for com/yubico/internal/util/BinaryUtil::encodeUint32 + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 61 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 40 + + + + + + 11 + + + + com.yubico.internal.util.BinaryUtilSpec + + changed conditional boundary + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 63 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 52 + + + + + + 14 + + + + com.yubico.internal.util.BinaryUtilSpec + + changed conditional boundary + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 56 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 6 + + + + + + 1 + + + + com.yubico.internal.util.BinaryUtilSpec + + Replaced integer modulus with multiplication + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 60 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 28 + + + + + + 9 + + + + com.yubico.internal.util.BinaryUtilSpec + + Replaced integer division with multiplication + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 77 + + + + + + 23 + + + + com.yubico.internal.util.BinaryUtilSpec + + Replaced integer division with multiplication + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 83 + + + + + + 23 + + + + com.yubico.internal.util.BinaryUtilSpec + + Replaced integer addition with subtraction + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 85 + + + + + + 23 + + + + com.yubico.internal.util.BinaryUtilSpec + + Replaced integer modulus with multiplication + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 87 + + + + + + 23 + + + + com.yubico.internal.util.BinaryUtilSpec + + Replaced integer multiplication with division + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 88 + + + + + + 23 + + + + com.yubico.internal.util.BinaryUtilSpec + + Replaced Shift Left with Shift Right + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 66 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 89 + + + + + + 23 + + + + com.yubico.internal.util.BinaryUtilSpec + + Replaced bitwise OR with AND + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 56 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 1 + + + + com.yubico.internal.util.BinaryUtilSpec + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 61 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 40 + + + + + + 11 + + + + com.yubico.internal.util.BinaryUtilSpec + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 63 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 52 + + + + + + 14 + + + + com.yubico.internal.util.BinaryUtilSpec + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + fromHex + + (Ljava/lang/String;)[B + + 68 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 100 + + + + + + 24 + + + + com.yubico.internal.util.BinaryUtilSpec + + replaced return value with null for com/yubico/internal/util/BinaryUtil::fromHex + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + getUint16 + + ([B)I + + 102 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 0 + + + + com.yubico.internal.util.BinaryUtilSpec + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + getUint16 + + ([B)I + + 104 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 41 + + + + + + 4 + + + + com.yubico.internal.util.BinaryUtilSpec + + replaced int return with 0 for com/yubico/internal/util/BinaryUtil::getUint16 + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + getUint32 + + ([B)J + + 120 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 6 + + + + + + 0 + + + + com.yubico.internal.util.BinaryUtilSpec + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + getUint32 + + ([B)J + + 122 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 61 + + + + + + 4 + + + + com.yubico.internal.util.BinaryUtilSpec + + replaced long return with 0 for com/yubico/internal/util/BinaryUtil::getUint32 + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + getUint8 + + (B)S + + 91 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 17 + + + + + + 3 + + + + com.yubico.internal.util.BinaryUtilSpec + + replaced short return with 0 for com/yubico/internal/util/BinaryUtil::getUint8 + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + readAll + + (Ljava/io/InputStream;)[B + + 159 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 25 + + + + + + 2 + + + + + + changed conditional boundary + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + readAll + + (Ljava/io/InputStream;)[B + + 158 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 19 + + + + + + 1 + + + + + + Replaced integer subtraction with addition + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + readAll + + (Ljava/io/InputStream;)[B + + 162 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 37 + + + + + + 5 + + + + + + Replaced integer addition with subtraction + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + readAll + + (Ljava/io/InputStream;)[B + + 164 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 51 + + + + + + 6 + + + + + + Replaced integer multiplication with division + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + readAll + + (Ljava/io/InputStream;)[B + + 159 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 2 + + + + + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + readAll + + (Ljava/io/InputStream;)[B + + 163 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 44 + + + + + + 5 + + + + + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + readAll + + (Ljava/io/InputStream;)[B + + 160 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 31 + + + + + + 4 + + + + + + replaced return value with null for com/yubico/internal/util/BinaryUtil::readAll + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + singleFromHex + + (Ljava/lang/String;)B + + 78 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + singleFromHex + + (Ljava/lang/String;)B + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 25 + + + + + + 4 + + + + + + removed call to com/yubico/internal/util/ExceptionUtil::assertTrue + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + singleFromHex + + (Ljava/lang/String;)B + + 79 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 32 + + + + + + 6 + + + + + + replaced byte return with 0 for com/yubico/internal/util/BinaryUtil::singleFromHex + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + toHex + + ([B)Ljava/lang/String; + + 44 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 18 + + + + + + 1 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + changed conditional boundary + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + toHex + + ([B)Ljava/lang/String; + + 43 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 6 + + + + + + 0 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + Replaced integer multiplication with division + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + toHex + + ([B)Ljava/lang/String; + + 45 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 23 + + + + + + 2 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + Replaced integer multiplication with division + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + toHex + + ([B)Ljava/lang/String; + + 46 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 33 + + + + + + 2 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + Replaced Shift Right with Shift Left + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + toHex + + ([B)Ljava/lang/String; + + 46 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 35 + + + + + + 2 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + Replaced bitwise AND with OR + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + toHex + + ([B)Ljava/lang/String; + + 47 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 44 + + + + + + 3 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + Replaced integer addition with subtraction + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + toHex + + ([B)Ljava/lang/String; + + 47 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 49 + + + + + + 3 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + Replaced bitwise AND with OR + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + toHex + + ([B)Ljava/lang/String; + + 44 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 1 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + negated conditional + + + + + + BinaryUtil.java + + com.yubico.internal.util.BinaryUtil + + toHex + + ([B)Ljava/lang/String; + + 49 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 64 + + + + + + 6 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + replaced return value with "" for com/yubico/internal/util/BinaryUtil::toHex + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + computeSubjectKeyIdentifier + + (Ljava/security/cert/Certificate;)[B + + 117 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 17 + + + + + + 2 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + Replaced integer addition with subtraction + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + computeSubjectKeyIdentifier + + (Ljava/security/cert/Certificate;)[B + + 117 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 19 + + + + + + 2 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + Replaced integer addition with subtraction + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + computeSubjectKeyIdentifier + + (Ljava/security/cert/Certificate;)[B + + 119 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 35 + + + + + + 5 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + replaced return value with null for com/yubico/internal/util/CertificateParser::computeSubjectKeyIdentifier + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + lambda$parseFidoAaguidExtension$0 + + (Ljava/security/cert/X509Certificate;[B)V + + 158 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 2 + + + + + + negated conditional + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseAaguid + + ([B)[B + + 134 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseAaguid + + ([B)[B + + 134 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 1 + + + + + + negated conditional + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseAaguid + + ([B)[B + + 137 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 19 + + + + + + 4 + + + + + + negated conditional + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseAaguid + + ([B)[B + + 138 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 25 + + + + + + 6 + + + + + + negated conditional + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseAaguid + + ([B)[B + + 139 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 31 + + + + + + 8 + + + + + + negated conditional + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseAaguid + + ([B)[B + + 140 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 37 + + + + + + 10 + + + + + + negated conditional + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseAaguid + + ([B)[B + + 144 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 52 + + + + + + 12 + + + + + + replaced return value with null for com/yubico/internal/util/CertificateParser::parseAaguid + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseDer + + (Ljava/io/InputStream;)Ljava/security/cert/X509Certificate; + + 80 + + org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator + + + + 29 + + + + + + 7 + + + + + + changed conditional boundary + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseDer + + (Ljava/io/InputStream;)Ljava/security/cert/X509Certificate; + + 81 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 36 + + + + + + 8 + + + + com.yubico.internal.util.CertificateParserTest.parsePemDoesNotReturnNull(com.yubico.internal.util.CertificateParserTest) + + Replaced integer subtraction with addition + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseDer + + (Ljava/io/InputStream;)Ljava/security/cert/X509Certificate; + + 77 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 18 + + + + + + 5 + + + + + + negated conditional + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseDer + + (Ljava/io/InputStream;)Ljava/security/cert/X509Certificate; + + 80 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 29 + + + + + + 7 + + + + com.yubico.internal.util.CertificateParserTest.parsePemDoesNotReturnNull(com.yubico.internal.util.CertificateParserTest) + + negated conditional + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseDer + + (Ljava/io/InputStream;)Ljava/security/cert/X509Certificate; + + 95 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 90 + + + + + + 18 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseDer + + (Ljava/lang/String;)Ljava/security/cert/X509Certificate; + + 65 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseDer + + ([B)Ljava/security/cert/X509Certificate; + + 69 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + replaced return value with null for com/yubico/internal/util/CertificateParser::parseDer + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseFidoAaguidExtension + + (Ljava/security/cert/X509Certificate;)Ljava/util/Optional; + + 156 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 19 + + + + + + 3 + + + + + + removed call to java/util/Optional::ifPresent + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parseFidoAaguidExtension + + (Ljava/security/cert/X509Certificate;)Ljava/util/Optional; + + 165 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 23 + + + + + + 4 + + + + + + replaced return value with Optional.empty for com/yubico/internal/util/CertificateParser::parseFidoAaguidExtension + + + + + + CertificateParser.java + + com.yubico.internal.util.CertificateParser + + parsePem + + (Ljava/lang/String;)Ljava/security/cert/X509Certificate; + + 57 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 22 + + + + + + 4 + + + + com.yubico.internal.util.CertificateParserTest.subjectPublicKeyIdentifierIsCorrect(com.yubico.internal.util.CertificateParserTest) + + replaced return value with null for com/yubico/internal/util/CertificateParser::parsePem + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + orElseOptional + + (Ljava/util/Optional;Ljava/util/function/Supplier;)Ljava/util/Optional; + + 31 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + + + negated conditional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + orElseOptional + + (Ljava/util/Optional;Ljava/util/function/Supplier;)Ljava/util/Optional; + + 32 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 2 + + + + + + replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orElseOptional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + orElseOptional + + (Ljava/util/Optional;Ljava/util/function/Supplier;)Ljava/util/Optional; + + 34 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 16 + + + + + + 4 + + + + + + replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orElseOptional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + orOptional + + (Ljava/util/Optional;Ljava/util/Optional;)Ljava/util/Optional; + + 19 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + + + negated conditional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + orOptional + + (Ljava/util/Optional;Ljava/util/Optional;)Ljava/util/Optional; + + 20 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 2 + + + + + + replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orOptional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + orOptional + + (Ljava/util/Optional;Ljava/util/Optional;)Ljava/util/Optional; + + 22 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 14 + + + + + + 3 + + + + + + replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::orOptional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + stream + + (Ljava/util/Optional;)Ljava/util/stream/Stream; + + 45 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + stream + + (Ljava/util/Optional;)Ljava/util/stream/Stream; + + 46 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 19 + + + + + + 5 + + + + + + replaced return value with Stream.empty for com/yubico/internal/util/OptionalUtil::stream + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + zipWith + + (Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional; + + 57 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 5 + + + + + + 1 + + + + + + negated conditional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + zipWith + + (Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional; + + 57 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 8 + + + + + + 3 + + + + + + negated conditional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + zipWith + + (Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional; + + 59 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 24 + + + + + + 10 + + + + + + negated conditional + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + zipWith + + (Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional; + + 58 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 18 + + + + + + 8 + + + + + + replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + zipWith + + (Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional; + + 60 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 28 + + + + + + 11 + + + + + + replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith + + + + + + OptionalUtil.java + + com.yubico.internal.util.OptionalUtil + + zipWith + + (Ljava/util/Optional;Ljava/util/Optional;Ljava/util/function/BinaryOperator;)Ljava/util/Optional; + + 62 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 33 + + + + + + 12 + + + + + + replaced return value with Optional.empty for com/yubico/internal/util/OptionalUtil::zipWith + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 53 + + org.pitest.mutationtest.engine.gregor.mutators.MathMutator + + + + 81 + + + + + + 25 + + + + com.yubico.internal.util.ComparableUtilSpec + + Replaced integer subtraction with addition + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 34 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 7 + + + + + + 2 + + + + com.yubico.internal.util.ComparableUtilSpec + + negated conditional + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 38 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 23 + + + + + + 7 + + + + com.yubico.internal.util.ComparableUtilSpec + + negated conditional + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 38 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 26 + + + + + + 9 + + + + + + negated conditional + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 40 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 40 + + + + + + 13 + + + + com.yubico.internal.util.ComparableUtilSpec + + negated conditional + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 45 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 54 + + + + + + 17 + + + + com.yubico.internal.util.ComparableUtilSpec + + negated conditional + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 47 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 64 + + + + + + 20 + + + + com.yubico.internal.util.ComparableUtilSpec + + negated conditional + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 41 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 44 + + + + + + 14 + + + + com.yubico.internal.util.ComparableUtilSpec + + replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 46 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 58 + + + + + + 18 + + + + + + replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 48 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 68 + + + + + + 21 + + + + + + replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets + + + + + + ComparableUtil.java + + com.yubico.internal.util.ComparableUtil + + compareComparableSets + + (Ljava/util/SortedSet;Ljava/util/SortedSet;)I + + 53 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 82 + + + + + + 25 + + + + com.yubico.internal.util.ComparableUtilSpec + + replaced int return with 0 for com/yubico/internal/util/ComparableUtil::compareComparableSets + + + + + + CollectionUtil.java + + com.yubico.internal.util.CollectionUtil + + immutableList + + (Ljava/util/List;)Ljava/util/List; + + 30 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.internal.util.CollectionUtilSpec + + replaced return value with Collections.emptyList for com/yubico/internal/util/CollectionUtil::immutableList + + + + + + CollectionUtil.java + + com.yubico.internal.util.CollectionUtil + + immutableListOrEmpty + + (Ljava/util/List;)Ljava/util/List; + + 37 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + CollectionUtil.java + + com.yubico.internal.util.CollectionUtil + + immutableListOrEmpty + + (Ljava/util/List;)Ljava/util/List; + + 37 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 13 + + + + + + 4 + + + + + + replaced return value with Collections.emptyList for com/yubico/internal/util/CollectionUtil::immutableListOrEmpty + + + + + + CollectionUtil.java + + com.yubico.internal.util.CollectionUtil + + immutableMap + + (Ljava/util/Map;)Ljava/util/Map; + + 21 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.internal.util.CollectionUtilSpec + + replaced return value with Collections.emptyMap for com/yubico/internal/util/CollectionUtil::immutableMap + + + + + + CollectionUtil.java + + com.yubico.internal.util.CollectionUtil + + immutableSet + + (Ljava/util/Set;)Ljava/util/Set; + + 46 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.internal.util.CollectionUtilSpec + + replaced return value with Collections.emptySet for com/yubico/internal/util/CollectionUtil::immutableSet + + + + + + CollectionUtil.java + + com.yubico.internal.util.CollectionUtil + + immutableSetOrEmpty + + (Ljava/util/Set;)Ljava/util/Set; + + 51 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + + + negated conditional + + + + + + CollectionUtil.java + + com.yubico.internal.util.CollectionUtil + + immutableSetOrEmpty + + (Ljava/util/Set;)Ljava/util/Set; + + 51 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 13 + + + + + + 4 + + + + + + replaced return value with Collections.emptySet for com/yubico/internal/util/CollectionUtil::immutableSetOrEmpty + + + + + + CollectionUtil.java + + com.yubico.internal.util.CollectionUtil + + immutableSortedSet + + (Ljava/util/Set;)Ljava/util/SortedSet; + + 60 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 8 + + + + + + 2 + + + + com.yubico.internal.util.CollectionUtilSpec + + replaced return value with null for com/yubico/internal/util/CollectionUtil::immutableSortedSet + + + + + + ByteInputStream.java + + com.yubico.internal.util.ByteInputStream + + read + + (I)[B + + 40 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 10 + + + + + + 0 + + + + + + removed call to com/yubico/internal/util/ByteInputStream::readFully + + + + + + ByteInputStream.java + + com.yubico.internal.util.ByteInputStream + + read + + (I)[B + + 41 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 14 + + + + + + 1 + + + + + + replaced return value with null for com/yubico/internal/util/ByteInputStream::read + + + + + + ByteInputStream.java + + com.yubico.internal.util.ByteInputStream + + readAll + + ()[B + + 46 + + org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator + + + + 11 + + + + + + 1 + + + + + + removed call to com/yubico/internal/util/ByteInputStream::readFully + + + + + + ByteInputStream.java + + com.yubico.internal.util.ByteInputStream + + readAll + + ()[B + + 47 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 15 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/internal/util/ByteInputStream::readAll + + + + + + ByteInputStream.java + + com.yubico.internal.util.ByteInputStream + + readInteger + + ()I + + 51 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 5 + + + + + + 1 + + + + + + replaced int return with 0 for com/yubico/internal/util/ByteInputStream::readInteger + + + + + + ByteInputStream.java + + com.yubico.internal.util.ByteInputStream + + readSigned + + ()B + + 55 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 5 + + + + + + 1 + + + + + + replaced byte return with 0 for com/yubico/internal/util/ByteInputStream::readSigned + + + + + + ByteInputStream.java + + com.yubico.internal.util.ByteInputStream + + readUnsigned + + ()I + + 59 + + org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator + + + + 5 + + + + + + 1 + + + + + + replaced int return with 0 for com/yubico/internal/util/ByteInputStream::readUnsigned + + + + + + JacksonCodecs.java + + com.yubico.internal.util.JacksonCodecs + + cbor + + ()Lcom/fasterxml/jackson/databind/ObjectMapper; + + 18 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 11 + + + + + + 3 + + + + + + replaced return value with null for com/yubico/internal/util/JacksonCodecs::cbor + + + + + + JacksonCodecs.java + + com.yubico.internal.util.JacksonCodecs + + deepCopy + + (Lcom/fasterxml/jackson/databind/node/ObjectNode;)Lcom/fasterxml/jackson/databind/node/ObjectNode; + + 37 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 10 + + + + + + 4 + + + + + + replaced return value with null for com/yubico/internal/util/JacksonCodecs::deepCopy + + + + + + JacksonCodecs.java + + com.yubico.internal.util.JacksonCodecs + + deepCopy + + (Lcom/upokecenter/cbor/CBORObject;)Lcom/upokecenter/cbor/CBORObject; + + 32 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 6 + + + + + + 2 + + + + + + replaced return value with null for com/yubico/internal/util/JacksonCodecs::deepCopy + + + + + + JacksonCodecs.java + + com.yubico.internal.util.JacksonCodecs + + json + + ()Lcom/fasterxml/jackson/databind/ObjectMapper; + + 22 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 39 + + + + + + 9 + + + + + + replaced return value with null for com/yubico/internal/util/JacksonCodecs::json + + + + + + StreamUtil.java + + com.yubico.internal.util.StreamUtil + + lambda$toStream$0 + + (Ljava/util/Iterator;)Ljava/util/Iterator; + + 38 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 4 + + + + + + 0 + + + + + + replaced return value with null for com/yubico/internal/util/StreamUtil::lambda$toStream$0 + + + + + + StreamUtil.java + + com.yubico.internal.util.StreamUtil + + toSet + + (Ljava/util/Iterator;)Ljava/util/Set; + + 43 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 9 + + + + + + 4 + + + + + + replaced return value with Collections.emptySet for com/yubico/internal/util/StreamUtil::toSet + + + + + + StreamUtil.java + + com.yubico.internal.util.StreamUtil + + toStream + + (Ljava/util/Iterator;)Ljava/util/stream/Stream; + + 39 + + org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator + + + + 12 + + + + + + 2 + + + + + + replaced return value with Stream.empty for com/yubico/internal/util/StreamUtil::toStream + + + + + + ExceptionUtil.java + + com.yubico.internal.util.ExceptionUtil + + assertTrue + + (ZLjava/lang/String;[Ljava/lang/Object;)V + + 41 + + org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator + + + + 4 + + + + + + 0 + + + + com.yubico.internal.util.BinaryUtilSpec + + negated conditional + + + + + + ExceptionUtil.java + + com.yubico.internal.util.ExceptionUtil + + wrapAndLog + + (Lorg/slf4j/Logger;Ljava/lang/String;Ljava/lang/Throwable;)Ljava/lang/RuntimeException; + + 36 + + org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator + + + + 19 + + + + + + 3 + + + + + + replaced return value with null for com/yubico/internal/util/ExceptionUtil::wrapAndLog + + + +