package com.android.anqp.eap; import java.net.ProtocolException; import java.nio.ByteBuffer; import static com.android.anqp.Constants.BYTE_MASK; /** * An EAP authentication parameter, IEEE802.11-2012, table 8-188 */ public class Credential implements AuthParam { public enum CredType { Reserved, SIM, USIM, NFC, HWToken, Softoken, Certificate, Username, None, Anonymous, VendorSpecific} private final EAP.AuthInfoID mAuthInfoID; private final CredType mCredType; public Credential(EAP.AuthInfoID infoID, int length, ByteBuffer payload) throws ProtocolException { if (length != 1) { throw new ProtocolException("Bad length: " + length); } mAuthInfoID = infoID; int typeID = payload.get() & BYTE_MASK; mCredType = typeID < CredType.values().length ? CredType.values()[typeID] : CredType.Reserved; } @Override public EAP.AuthInfoID getAuthInfoID() { return mAuthInfoID; } @Override public int hashCode() { return mAuthInfoID.hashCode() * 31 + mCredType.hashCode(); } @Override public boolean equals(Object thatObject) { if (thatObject == this) { return true; } else if (thatObject == null || thatObject.getClass() != Credential.class) { return false; } else { return ((Credential) thatObject).getCredType() == getCredType(); } } public CredType getCredType() { return mCredType; } @Override public String toString() { return "Auth method " + mAuthInfoID + " = " + mCredType + "\n"; } }