Search in sources :

Example 1 with External

use of de.pixart.messenger.crypto.sasl.External in project Pix-Art-Messenger by kriztan.

the class XmppConnection method authenticate.

private void authenticate() throws IOException {
    final List<String> mechanisms = extractMechanisms(streamFeatures.findChild("mechanisms"));
    final Element auth = new Element("auth", Namespace.SASL);
    if (mechanisms.contains("EXTERNAL") && account.getPrivateKeyAlias() != null) {
        saslMechanism = new External(tagWriter, account, mXmppConnectionService.getRNG());
    } else if (mechanisms.contains("SCRAM-SHA-256")) {
        saslMechanism = new ScramSha256(tagWriter, account, mXmppConnectionService.getRNG());
    } else if (mechanisms.contains("SCRAM-SHA-1")) {
        saslMechanism = new ScramSha1(tagWriter, account, mXmppConnectionService.getRNG());
    } else if (mechanisms.contains("PLAIN") && !account.getJid().getDomainpart().equals("nimbuzz.com")) {
        saslMechanism = new Plain(tagWriter, account);
    } else if (mechanisms.contains("DIGEST-MD5")) {
        saslMechanism = new DigestMd5(tagWriter, account, mXmppConnectionService.getRNG());
    } else if (mechanisms.contains("ANONYMOUS")) {
        saslMechanism = new Anonymous(tagWriter, account, mXmppConnectionService.getRNG());
    }
    if (saslMechanism != null) {
        final int pinnedMechanism = account.getKeyAsInt(Account.PINNED_MECHANISM_KEY, -1);
        if (pinnedMechanism > saslMechanism.getPriority()) {
            Log.e(Config.LOGTAG, "Auth failed. Authentication mechanism " + saslMechanism.getMechanism() + " has lower priority (" + String.valueOf(saslMechanism.getPriority()) + ") than pinned priority (" + pinnedMechanism + "). Possible downgrade attack?");
            throw new StateChangingException(Account.State.DOWNGRADE_ATTACK);
        }
        Log.d(Config.LOGTAG, account.getJid().toString() + ": Authenticating with " + saslMechanism.getMechanism());
        auth.setAttribute("mechanism", saslMechanism.getMechanism());
        if (!saslMechanism.getClientFirstMessage().isEmpty()) {
            auth.setContent(saslMechanism.getClientFirstMessage());
        }
        tagWriter.writeElement(auth);
    } else {
        throw new StateChangingException(Account.State.INCOMPATIBLE_SERVER);
    }
}
Also used : ScramSha256(de.pixart.messenger.crypto.sasl.ScramSha256) Plain(de.pixart.messenger.crypto.sasl.Plain) DigestMd5(de.pixart.messenger.crypto.sasl.DigestMd5) Element(de.pixart.messenger.xml.Element) External(de.pixart.messenger.crypto.sasl.External) ScramSha1(de.pixart.messenger.crypto.sasl.ScramSha1) Anonymous(de.pixart.messenger.crypto.sasl.Anonymous)

Aggregations

Anonymous (de.pixart.messenger.crypto.sasl.Anonymous)1 DigestMd5 (de.pixart.messenger.crypto.sasl.DigestMd5)1 External (de.pixart.messenger.crypto.sasl.External)1 Plain (de.pixart.messenger.crypto.sasl.Plain)1 ScramSha1 (de.pixart.messenger.crypto.sasl.ScramSha1)1 ScramSha256 (de.pixart.messenger.crypto.sasl.ScramSha256)1 Element (de.pixart.messenger.xml.Element)1