diff options
Diffstat (limited to 'src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeData.java')
-rw-r--r-- | src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeData.java | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeData.java b/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeData.java new file mode 100644 index 00000000..7f06d683 --- /dev/null +++ b/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeData.java @@ -0,0 +1,95 @@ +/* + * 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 com.android.ike.eap.message.simaka; + +import android.annotation.NonNull; + +import com.android.ike.eap.message.EapMessage; +import com.android.ike.eap.message.simaka.EapSimAkaAttribute.AtClientErrorCode; +import com.android.internal.annotations.VisibleForTesting; + +import java.util.LinkedHashMap; +import java.util.List; + +/** + * EapAkaPrimeTypeData represents the Type Data for an {@link EapMessage} during an EAP-AKA' + * session. + */ +public class EapAkaPrimeTypeData extends EapAkaTypeData { + private static final EapAkaPrimeTypeDataDecoder sTypeDataDecoder = + new EapAkaPrimeTypeDataDecoder(); + + @VisibleForTesting + EapAkaPrimeTypeData( + int eapSubType, LinkedHashMap<Integer, EapSimAkaAttribute> attributeMap) { + super(eapSubType, attributeMap); + } + + /** + * Creates and returns an EapAkaPrimeTypeData instance with the given subtype and attributes. + * + * @param eapSubtype the subtype for the EAP-AKA type data + * @param attributes the List of EapSimAkaAttributes to be included in this type data + */ + public EapAkaPrimeTypeData(int eapSubtype, List<EapSimAkaAttribute> attributes) { + super(eapSubtype, attributes); + } + + public static EapAkaPrimeTypeDataDecoder getEapAkaPrimeTypeDataDecoder() { + return sTypeDataDecoder; + } + + /** + * EapAkaTypeDataDecoder will be used for decoding {@link EapAkaPrimeTypeData} objects. + */ + public static class EapAkaPrimeTypeDataDecoder + extends EapSimAkaTypeDataDecoder<EapAkaTypeData> { + private static final String TAG = EapAkaPrimeTypeDataDecoder.class.getSimpleName(); + private static final String EAP_METHOD = "EAP-AKA'"; + + protected EapAkaPrimeTypeDataDecoder() { + super( + TAG, + EAP_METHOD, + SUPPORTED_SUBTYPES, + EapAkaPrimeAttributeFactory.getInstance(), + EAP_AKA_SUBTYPE_STRING); + } + + /** + * Decodes the given byte-array into a DecodeResult object. + * + * <p>Note that <b>only 1 KDF value</b> is allowed. If multiple AT_KDF attributes are + * supplied, a {@link DecodeResult} wrapping a {@link AtClientErrorCode#UNABLE_TO_PROCESS} + * will be returned. + * + * @param typeData the byte-encoding of the EapAkaPrimeTypeData to be parsed + * @return a DecodeResult object. If the decoding is successful, this will encapsulate an + * EapAkaPrimeTypeData instance representing the data stored in typeData. Otherwise, it + * will contain the relevant AtClientErrorCode for the decoding error. + */ + public DecodeResult<EapAkaTypeData> decode(@NonNull byte[] typeData) { + return super.decode(typeData); + } + + @Override + protected EapAkaPrimeTypeData getInstance( + int eapSubtype, LinkedHashMap<Integer, EapSimAkaAttribute> attributeMap) { + return new EapAkaPrimeTypeData(eapSubtype, attributeMap); + } + } +} |