Content
Indicates that some value (key to be attests, bundle identifier or package name, team identified or signer certificate, etc.) failed to verify This usually means that either the client's OS or the app was compromised/modified (or an implementation error occurred).
For Android, platformSpecificCause is always an AttestationValueException, on iOS it is always an IosAttestationException, both of which have enumerable reason property, which is documented.
Android Examples:
Invalid package name:
platformSpecificCause.shouldBeInstanceOf<AttestationValueException>().reason shouldBe AttestationValueException.Reason.PACKAGE_NAMEChallenge mismatch:
platformSpecificCause.shouldBeInstanceOf<AttestationValueException>().reason shouldBe AttestationValueException.Reason.CHALLENGEOS version too low:
platformSpecificCause.shouldBeInstanceOf<AttestationValueException>().reason shouldBe AttestationValueException.Reason.OS_VERSIONPublic Key mismatch:
platformSpecificCause.shouldBeInstanceOf<AttestationValueException>().reason shouldBe AttestationValueException.Reason.APP_UNEXPECTEDSystem integrity:
platformSpecificCause.shouldBeInstanceOf<AttestationValueException>().reason shouldBe AttestationValueException.Reason.SYSTEM_INTEGRITYA mismatch in security level can either result in the platformSpecificCause being Content and reason being AttestationValueException.Reason.SEC_LEVEL or a Certificate.Trust exception due to mismatching root certificates
iOS Examples
Invalid bundle identifier / team id / stage:
platformSpecificCause.shouldBeInstanceOf<IosAttestationException>().reason shouldBe IosAttestationException.Reason.IDENTIFIERChallenge mismatch:
platformSpecificCause.shouldBeInstanceOf<IosAttestationException>().reason shouldBe IosAttestationException.Reason.CHALLENGEOS version too low:
platformSpecificCause.shouldBeInstanceOf<IosAttestationException>().reason shouldBe IosAttestationException.Reason.OS_VERSIONPublic Key mismatch:
platformSpecificCause.shouldBeInstanceOf<IosAttestationException>().reason shouldBe IosAttestationException.Reason.APP_UNEXPECTEDSystem integrity mismatch won't result in a valid attestation object obtained on the client, so this can never reach the back-end, except as a bogus attestation proof that will fail the attestation check in various ways depending on how this fake proof was constructed.