fix client crashing on empty passwords (regression)
This commit is contained in:
parent
93c2fd4da6
commit
41da2a5957
|
@ -1,7 +1,6 @@
|
||||||
package eu.siacs.conversations.crypto.sasl;
|
package eu.siacs.conversations.crypto.sasl;
|
||||||
|
|
||||||
import android.util.Base64;
|
import android.util.Base64;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.google.common.base.CaseFormat;
|
import com.google.common.base.CaseFormat;
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
|
@ -13,14 +12,32 @@ import java.nio.charset.Charset;
|
||||||
import java.security.InvalidKeyException;
|
import java.security.InvalidKeyException;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
|
import javax.crypto.SecretKey;
|
||||||
import javax.net.ssl.SSLSocket;
|
import javax.net.ssl.SSLSocket;
|
||||||
|
|
||||||
import eu.siacs.conversations.Config;
|
|
||||||
import eu.siacs.conversations.entities.Account;
|
import eu.siacs.conversations.entities.Account;
|
||||||
import eu.siacs.conversations.utils.CryptoHelper;
|
import eu.siacs.conversations.utils.CryptoHelper;
|
||||||
|
|
||||||
abstract class ScramMechanism extends SaslMechanism {
|
abstract class ScramMechanism extends SaslMechanism {
|
||||||
|
|
||||||
|
public static final SecretKey EMPTY_KEY =
|
||||||
|
new SecretKey() {
|
||||||
|
@Override
|
||||||
|
public String getAlgorithm() {
|
||||||
|
return "HMAC";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFormat() {
|
||||||
|
return "RAW";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] getEncoded() {
|
||||||
|
return new byte[0];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private static final byte[] CLIENT_KEY_BYTES = "Client Key".getBytes();
|
private static final byte[] CLIENT_KEY_BYTES = "Client Key".getBytes();
|
||||||
private static final byte[] SERVER_KEY_BYTES = "Server Key".getBytes();
|
private static final byte[] SERVER_KEY_BYTES = "Server Key".getBytes();
|
||||||
private static final Cache<CacheKey, KeyPair> CACHE =
|
private static final Cache<CacheKey, KeyPair> CACHE =
|
||||||
|
|
|
@ -15,7 +15,9 @@ public class ScramSha1 extends ScramMechanism {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected HashFunction getHMac(final byte[] key) {
|
protected HashFunction getHMac(final byte[] key) {
|
||||||
return Hashing.hmacSha1(key);
|
return (key == null || key.length == 0)
|
||||||
|
? Hashing.hmacSha1(EMPTY_KEY)
|
||||||
|
: Hashing.hmacSha1(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -15,7 +15,9 @@ public class ScramSha1Plus extends ScramPlusMechanism {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected HashFunction getHMac(final byte[] key) {
|
protected HashFunction getHMac(final byte[] key) {
|
||||||
return Hashing.hmacSha1(key);
|
return (key == null || key.length == 0)
|
||||||
|
? Hashing.hmacSha1(EMPTY_KEY)
|
||||||
|
: Hashing.hmacSha1(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -19,7 +19,9 @@ public class ScramSha256 extends ScramMechanism {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected HashFunction getHMac(final byte[] key) {
|
protected HashFunction getHMac(final byte[] key) {
|
||||||
return Hashing.hmacSha256(key);
|
return (key == null || key.length == 0)
|
||||||
|
? Hashing.hmacSha256(EMPTY_KEY)
|
||||||
|
: Hashing.hmacSha256(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -15,7 +15,9 @@ public class ScramSha256Plus extends ScramPlusMechanism {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected HashFunction getHMac(final byte[] key) {
|
protected HashFunction getHMac(final byte[] key) {
|
||||||
return Hashing.hmacSha256(key);
|
return (key == null || key.length == 0)
|
||||||
|
? Hashing.hmacSha256(EMPTY_KEY)
|
||||||
|
: Hashing.hmacSha256(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -19,7 +19,9 @@ public class ScramSha512 extends ScramMechanism {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected HashFunction getHMac(final byte[] key) {
|
protected HashFunction getHMac(final byte[] key) {
|
||||||
return Hashing.hmacSha512(key);
|
return (key == null || key.length == 0)
|
||||||
|
? Hashing.hmacSha512(EMPTY_KEY)
|
||||||
|
: Hashing.hmacSha512(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -15,7 +15,9 @@ public class ScramSha512Plus extends ScramPlusMechanism {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected HashFunction getHMac(final byte[] key) {
|
protected HashFunction getHMac(final byte[] key) {
|
||||||
return Hashing.hmacSha512(key);
|
return (key == null || key.length == 0)
|
||||||
|
? Hashing.hmacSha512(EMPTY_KEY)
|
||||||
|
: Hashing.hmacSha512(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue