| /* |
| * Copyright (C) 2020 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.hardware.keymaster; |
| |
| import android.hardware.keymaster.SecurityLevel; |
| import android.hardware.keymaster.Timestamp; |
| |
| /** |
| * VerificationToken instances are used for secure environments to authenticate one another. |
| * |
| * This version of the parcelable currently don't use the parametersVerified field since it's not |
| * needed for time-based verification. This can be added in a later version, if needed. |
| * @hide |
| */ |
| @VintfStability |
| parcelable VerificationToken { |
| /** |
| * The operation handle, used to ensure freshness. |
| */ |
| long challenge; |
| |
| /** |
| * The current time of the secure environment that generates the VerificationToken. This can be |
| * checked against auth tokens generated by the same secure environment, which avoids needing to |
| * synchronize clocks. |
| */ |
| Timestamp timestamp; |
| |
| /** |
| * SecurityLevel of the secure environment that generated the token. |
| */ |
| SecurityLevel securityLevel = SecurityLevel.SOFTWARE; |
| |
| /** |
| * 32-byte HMAC-SHA256 of the above values, computed as: |
| * |
| * HMAC(H, |
| * "Auth Verification" || challenge || timestamp || securityLevel || parametersVerified) |
| * |
| * where: |
| * |
| * ``HMAC'' is the shared HMAC key (see computeSharedHmac() in IKeymaster). |
| * |
| * ``||'' represents concatenation |
| * |
| * The representation of challenge and timestamp is as 64-bit unsigned integers in big-endian |
| * order. securityLevel is represented as a 32-bit unsigned integer in big-endian order. |
| * |
| * If parametersVerified is non-empty, the representation of parametersVerified is an ASN.1 DER |
| * encoded representation of the values. The ASN.1 schema used is the AuthorizationList schema |
| * from the Keystore attestation documentation. If parametersVerified is empty, it is simply |
| * omitted from the HMAC computation. |
| */ |
| byte[] mac; |
| } |