Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions src/main/kotlin/Verifier.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import com.android.keyattestation.verifier.provider.ProvisioningMethod
import com.android.keyattestation.verifier.provider.RevocationChecker
import com.google.common.collect.ImmutableList
import com.google.common.util.concurrent.ListenableFuture
import com.google.errorprone.annotations.Immutable
import com.google.errorprone.annotations.ThreadSafe
import com.google.protobuf.ByteString
import com.google.protobuf.kotlin.toByteString
Expand All @@ -42,8 +43,13 @@ import kotlinx.coroutines.guava.future
import kotlinx.coroutines.runBlocking

/** The result of verifying an Android Key Attestation certificate chain. */
@Immutable
sealed interface VerificationResult {
@Immutable
data class Success(
@SuppressWarnings(
"Immutable"
) // PublicKey implementations are immutable but not marked as such.
val publicKey: PublicKey,
val challenge: ByteString,
val securityLevel: SecurityLevel,
Expand All @@ -52,18 +58,28 @@ sealed interface VerificationResult {
val attestedDeviceIds: DeviceIdentity,
) : VerificationResult

data object ChallengeMismatch : VerificationResult
@Immutable data object ChallengeMismatch : VerificationResult

data class PathValidationFailure(val cause: CertPathValidatorException) : VerificationResult
@Immutable
data class PathValidationFailure(
@SuppressWarnings("Immutable") // Exceptions are not deeply immutable.
val cause: CertPathValidatorException
) : VerificationResult

data class ChainParsingFailure(val cause: Exception) : VerificationResult
@Immutable
data class ChainParsingFailure(
@SuppressWarnings("Immutable") // Exceptions are not deeply immutable.
val cause: Exception
) : VerificationResult

@Immutable
data class ExtensionParsingFailure(val cause: ExtensionParsingException) : VerificationResult

@Immutable
data class ExtensionConstraintViolation(val cause: String, val reason: KeyAttestationReason) :
VerificationResult

data object SoftwareAttestationUnsupported : VerificationResult
@Immutable data object SoftwareAttestationUnsupported : VerificationResult
}

/**
Expand Down