Make sure SASL tokenizer strips strings

Sam Whited created

Fix DIGEST-MD5 auth (make sure we're not splitting on BASE64 `==')

Change summary

src/main/java/eu/siacs/conversations/crypto/sasl/DigestMd5.java | 2 
src/main/java/eu/siacs/conversations/crypto/sasl/Tokenizer.java | 4 +++
2 files changed, 5 insertions(+), 1 deletion(-)

Detailed changes

src/main/java/eu/siacs/conversations/crypto/sasl/DigestMd5.java 🔗

@@ -39,7 +39,7 @@ public class DigestMd5 extends SaslMechanism {
 					final Tokenizer tokenizer = new Tokenizer(Base64.decode(challenge, Base64.DEFAULT));
 					String nonce = "";
 					for (final String token : tokenizer) {
-						final String[] parts = token.split("=");
+						final String[] parts = token.split("=", 2);
 						if (parts[0].equals("nonce")) {
 							nonce = parts[1].replace("\"", "");
 						} else if (parts[0].equals("rspauth")) {

src/main/java/eu/siacs/conversations/crypto/sasl/Tokenizer.java 🔗

@@ -16,6 +16,10 @@ public final class Tokenizer implements Iterator<String>, Iterable<String> {
 	public Tokenizer(final byte[] challenge) {
 		final String challengeString = new String(challenge);
 		parts = new ArrayList<>(Arrays.asList(challengeString.split(",")));
+		// Trim parts.
+		for (int i = 0; i < parts.size(); i++) {
+			parts.set(i, parts.get(i).trim());
+		}
 		index = 0;
 	}