16a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpackage com.android.server.wifi.anqp.eap;
26a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
36a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.net.ProtocolException;
46a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer;
56a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
66a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport static com.android.server.wifi.anqp.Constants.BYTE_MASK;
76a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
86a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/**
96a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * An EAP authentication parameter, IEEE802.11-2012, table 8-188
106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */
116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class Credential implements AuthParam {
126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public enum CredType {
146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        Reserved,
156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        SIM,
166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        USIM,
176a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        NFC,
186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        HWToken,
196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        Softoken,
206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        Certificate,
216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        Username,
226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        None,
236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        Anonymous,
246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        VendorSpecific}
256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    private final EAP.AuthInfoID mAuthInfoID;
276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    private final CredType mCredType;
286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
293be1b3fc037bef7fb4448dec89aea3f2e1318853Jan Nordqvist    public Credential(EAP.AuthInfoID infoID, int length, ByteBuffer payload)
303be1b3fc037bef7fb4448dec89aea3f2e1318853Jan Nordqvist            throws ProtocolException {
31777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist        if (length != 1) {
32777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist            throw new ProtocolException("Bad length: " + length);
336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
343be1b3fc037bef7fb4448dec89aea3f2e1318853Jan Nordqvist
353be1b3fc037bef7fb4448dec89aea3f2e1318853Jan Nordqvist        mAuthInfoID = infoID;
366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        int typeID = payload.get() & BYTE_MASK;
37777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist
386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        mCredType = typeID < CredType.values().length ?
396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                CredType.values()[typeID] :
406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                CredType.Reserved;
416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
436a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    @Override
446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public EAP.AuthInfoID getAuthInfoID() {
456a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        return mAuthInfoID;
466a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
476a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
486a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    @Override
496a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public int hashCode() {
506a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        return mAuthInfoID.hashCode() * 31 + mCredType.hashCode();
516a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
526a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    @Override
546a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public boolean equals(Object thatObject) {
556a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        if (thatObject == this) {
566a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            return true;
5771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        } else if (thatObject == null || thatObject.getClass() != Credential.class) {
586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            return false;
596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        } else {
606a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            return ((Credential) thatObject).getCredType() == getCredType();
616a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
626a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
646a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public CredType getCredType() {
656a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        return mCredType;
666a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
676a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
686a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    @Override
696a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public String toString() {
707b2caa25fb57f2d95e0d0421704c49d3af4b8e6fJan Nordqvist        return "Auth method " + mAuthInfoID + " = " + mCredType + "\n";
716a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
726a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist}
73