| /* | |
| * Copyright 2021 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.security.identity; | |
| import android.annotation.FlaggedApi; | |
| import android.annotation.NonNull; | |
| import android.annotation.Nullable; | |
| import java.util.Collection; | |
| import java.util.LinkedHashMap; | |
| import java.util.Map; | |
| /** | |
| * An object representing a request for credential data. | |
| * | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public class CredentialDataRequest { | |
| CredentialDataRequest() {} | |
| /** | |
| * Gets the device-signed entries to request. | |
| * | |
| * @return the device-signed entries to request. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull Map<String, Collection<String>> getDeviceSignedEntriesToRequest() { | |
| return mDeviceSignedEntriesToRequest; | |
| } | |
| /** | |
| * Gets the issuer-signed entries to request. | |
| * | |
| * @return the issuer-signed entries to request. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull Map<String, Collection<String>> getIssuerSignedEntriesToRequest() { | |
| return mIssuerSignedEntriesToRequest; | |
| } | |
| /** | |
| * Gets whether to allow using an authentication key which use count has been exceeded. | |
| * | |
| * <p>By default this is set to true. | |
| * | |
| * @return whether to allow using an authentication key which use | |
| * count has been exceeded if no other key is available. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public boolean isAllowUsingExhaustedKeys() { | |
| return mAllowUsingExhaustedKeys; | |
| } | |
| /** | |
| * Gets whether to allow using an authentication key which is expired. | |
| * | |
| * <p>By default this is set to false. | |
| * | |
| * @return whether to allow using an authentication key which is | |
| * expired if no other key is available. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public boolean isAllowUsingExpiredKeys() { | |
| return mAllowUsingExpiredKeys; | |
| } | |
| /** | |
| * Gets whether to increment the use-count for the authentication key used. | |
| * | |
| * <p>By default this is set to true. | |
| * | |
| * @return whether to increment the use count of the authentication key used. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public boolean isIncrementUseCount() { | |
| return mIncrementUseCount; | |
| } | |
| /** | |
| * Gets the request message CBOR. | |
| * | |
| * <p>This data structure is described in the documentation for the | |
| * {@link PresentationSession#getCredentialData(String, CredentialDataRequest)} method. | |
| * | |
| * @return the request message CBOR as described above. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @Nullable byte[] getRequestMessage() { | |
| return mRequestMessage; | |
| } | |
| /** | |
| * Gets the reader signature. | |
| * | |
| * <p>This data structure is described in the documentation for the | |
| * {@link PresentationSession#getCredentialData(String, CredentialDataRequest)} method. | |
| * | |
| * @return a {@code COSE_Sign1} structure as described above. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @Nullable byte[] getReaderSignature() { | |
| return mReaderSignature; | |
| } | |
| Map<String, Collection<String>> mDeviceSignedEntriesToRequest = new LinkedHashMap<>(); | |
| Map<String, Collection<String>> mIssuerSignedEntriesToRequest = new LinkedHashMap<>(); | |
| boolean mAllowUsingExhaustedKeys = true; | |
| boolean mAllowUsingExpiredKeys = false; | |
| boolean mIncrementUseCount = true; | |
| byte[] mRequestMessage = null; | |
| byte[] mReaderSignature = null; | |
| /** | |
| * A builder for {@link CredentialDataRequest}. | |
| * | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public static final class Builder { | |
| private CredentialDataRequest mData; | |
| /** | |
| * Creates a new builder. | |
| * | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public Builder() { | |
| mData = new CredentialDataRequest(); | |
| } | |
| /** | |
| * Sets the device-signed entries to request. | |
| * | |
| * @param entriesToRequest the device-signed entries to request. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull Builder setDeviceSignedEntriesToRequest( | |
| @NonNull Map<String, Collection<String>> entriesToRequest) { | |
| mData.mDeviceSignedEntriesToRequest = entriesToRequest; | |
| return this; | |
| } | |
| /** | |
| * Sets the issuer-signed entries to request. | |
| * | |
| * @param entriesToRequest the issuer-signed entries to request. | |
| * @return the builder. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull Builder setIssuerSignedEntriesToRequest( | |
| @NonNull Map<String, Collection<String>> entriesToRequest) { | |
| mData.mIssuerSignedEntriesToRequest = entriesToRequest; | |
| return this; | |
| } | |
| /** | |
| * Sets whether to allow using an authentication key which use count has been exceeded. | |
| * | |
| * <p>This is useful in situations where the application hasn't had a chance to renew | |
| * authentication keys, for example if the device hasn't been connected to the Internet or | |
| * if the issuing authority server has been down. | |
| * | |
| * <p>The reason this could be useful is that the privacy risk of reusing an authentication | |
| * key for a credential presentation could be significantly smaller compared to the | |
| * inconvenience of not being able to present the credential at all. | |
| * | |
| * <p>By default this is set to true. | |
| * | |
| * @param allowUsingExhaustedKeys whether to allow using an authentication key which use | |
| * count has been exceeded if no other key is available. | |
| * @return the builder. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull Builder setAllowUsingExhaustedKeys(boolean allowUsingExhaustedKeys) { | |
| mData.mAllowUsingExhaustedKeys = allowUsingExhaustedKeys; | |
| return this; | |
| } | |
| /** | |
| * Sets whether to allow using an authentication key which is expired. | |
| * | |
| * <p>This is useful in situations where the application hasn't had a chance to renew | |
| * authentication keys, for example if the device hasn't been connected to the Internet or | |
| * if the issuing authority server has been down. | |
| * | |
| * <p>The reason this could be useful is that many verifiers are likely to accept a | |
| * credential presentation using an expired authentication key (the credential itself | |
| * wouldn't be expired) and it's likely better for the holder to be able to do this than | |
| * not present their credential at all. | |
| * | |
| * <p>By default this is set to false. | |
| * | |
| * @param allowUsingExpiredKeys whether to allow using an authentication key which is | |
| * expired if no other key is available. | |
| * @return the builder. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull Builder setAllowUsingExpiredKeys(boolean allowUsingExpiredKeys) { | |
| mData.mAllowUsingExpiredKeys = allowUsingExpiredKeys; | |
| return this; | |
| } | |
| /** | |
| * Sets whether to increment the use-count for the authentication key used. | |
| * | |
| * <p>Not incrementing the use-count for an authentication key is useful in situations | |
| * where the authentication key is known with certainty to not be leaked. For example, | |
| * consider an application doing a credential presentation for the sole purpose of | |
| * displaying the credential data to the user (not for verification). | |
| * | |
| * <p>By default this is set to true. | |
| * | |
| * @param incrementUseCount whether to increment the use count of the authentication | |
| * key used. | |
| * @return the builder. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull Builder setIncrementUseCount(boolean incrementUseCount) { | |
| mData.mIncrementUseCount = incrementUseCount; | |
| return this; | |
| } | |
| /** | |
| * Sets the request message CBOR. | |
| * | |
| * <p>This data structure is described in the documentation for the | |
| * {@link PresentationSession#getCredentialData(String, CredentialDataRequest)} method. | |
| * | |
| * @param requestMessage the request message CBOR as described above. | |
| * @return the builder. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull Builder setRequestMessage(@NonNull byte[] requestMessage) { | |
| mData.mRequestMessage = requestMessage; | |
| return this; | |
| } | |
| /** | |
| * Sets the reader signature. | |
| * | |
| * <p>This data structure is described in the documentation for the | |
| * {@link PresentationSession#getCredentialData(String, CredentialDataRequest)} method. | |
| * | |
| * @param readerSignature a {@code COSE_Sign1} structure as described above. | |
| * @return the builder. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull Builder setReaderSignature(@NonNull byte[] readerSignature) { | |
| mData.mReaderSignature = readerSignature; | |
| return this; | |
| } | |
| /** | |
| * Finishes building a {@link CredentialDataRequest}. | |
| * | |
| * @return the {@link CredentialDataRequest} object. | |
| * @deprecated Use {@code java.security.KeyStore} with the Android hardware-backed keystore | |
| * instead. | |
| */ | |
| @FlaggedApi(Flags.FLAG_API_DEPRECATION) | |
| @Deprecated | |
| public @NonNull CredentialDataRequest build() { | |
| return mData; | |
| } | |
| } | |
| } |