/* * Copyright (C) 2019 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.car.encryptionrunner; import android.annotation.IntDef; import com.android.internal.annotations.VisibleForTesting; /** * Factory that creates encryption runner. */ public class EncryptionRunnerFactory { private EncryptionRunnerFactory() { // prevent instantiation. } @IntDef({EncryptionRunnerType.UKEY2, EncryptionRunnerType.OOB_UKEY2}) public @interface EncryptionRunnerType { /** Use Ukey2 as underlying key exchange. */ int UKEY2 = 0; /** Use Ukey2 and an out of band channel as underlying key exchange. */ int OOB_UKEY2 = 1; } /** * Creates a new {@link EncryptionRunner} based on {@param type}. */ public static EncryptionRunner newRunner(@EncryptionRunnerType int type) { switch (type) { case EncryptionRunnerType.UKEY2: return new Ukey2EncryptionRunner(); case EncryptionRunnerType.OOB_UKEY2: return new OobUkey2EncryptionRunner(); default: throw new IllegalArgumentException("Unknown EncryptionRunnerType: " + type); } } /** * Creates a new {@link EncryptionRunner}. * * @deprecated Use {@link #newRunner(int)} instead. */ @Deprecated public static EncryptionRunner newRunner() { return newRunner(EncryptionRunnerType.UKEY2); } /** * Creates a new {@link EncryptionRunner} one that doesn't actually do encryption but is useful * for testing. */ @VisibleForTesting public static EncryptionRunner newDummyRunner() { return new DummyEncryptionRunner(); } }