diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2016-05-07 11:34:17 +0200 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2016-05-07 11:34:17 +0200 |
commit | 76889b9c58b27438b4b73474b325483cb859a3e7 (patch) | |
tree | 835614a0af1ce651f8f4d7ce46c7c2ab020c5965 /src/main/java/eu/siacs/conversations | |
parent | e2d3bef7397984b1b717ec4a5bf60f572da73779 (diff) |
handle invalid base64 is SASl SCRAM response
Diffstat (limited to 'src/main/java/eu/siacs/conversations')
-rw-r--r-- | src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java b/src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java index 3a05446c1..f40eec552 100644 --- a/src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java +++ b/src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java @@ -185,13 +185,17 @@ public class ScramSha1 extends SaslMechanism { state = State.RESPONSE_SENT; return Base64.encodeToString(clientFinalMessage.getBytes(), Base64.NO_WRAP); case RESPONSE_SENT: - final String clientCalculatedServerFinalMessage = "v=" + - Base64.encodeToString(serverSignature, Base64.NO_WRAP); - if (challenge == null || !clientCalculatedServerFinalMessage.equals(new String(Base64.decode(challenge, Base64.DEFAULT)))) { + try { + final String clientCalculatedServerFinalMessage = "v=" + + Base64.encodeToString(serverSignature, Base64.NO_WRAP); + if (!clientCalculatedServerFinalMessage.equals(new String(Base64.decode(challenge, Base64.DEFAULT)))) { + throw new Exception(); + }; + state = State.VALID_SERVER_RESPONSE; + return ""; + } catch(Exception e) { throw new AuthenticationException("Server final message does not match calculated final message"); } - state = State.VALID_SERVER_RESPONSE; - return ""; default: throw new InvalidStateException(state); } |