Change summary
src/main/java/eu/siacs/conversations/crypto/sasl/ScramMechanism.java | 21
src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java | 4
src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1Plus.java | 4
src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha256.java | 4
src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha256Plus.java | 4
src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha512.java | 4
src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha512Plus.java | 4
7 files changed, 37 insertions(+), 8 deletions(-)
Detailed changes
@@ -1,7 +1,6 @@
package eu.siacs.conversations.crypto.sasl;
import android.util.Base64;
-import android.util.Log;
import com.google.common.base.CaseFormat;
import com.google.common.base.Objects;
@@ -13,14 +12,32 @@ import java.nio.charset.Charset;
import java.security.InvalidKeyException;
import java.util.concurrent.ExecutionException;
+import javax.crypto.SecretKey;
import javax.net.ssl.SSLSocket;
-import eu.siacs.conversations.Config;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.utils.CryptoHelper;
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[] SERVER_KEY_BYTES = "Server Key".getBytes();
private static final Cache<CacheKey, KeyPair> CACHE =
@@ -15,7 +15,9 @@ public class ScramSha1 extends ScramMechanism {
@Override
protected HashFunction getHMac(final byte[] key) {
- return Hashing.hmacSha1(key);
+ return (key == null || key.length == 0)
+ ? Hashing.hmacSha1(EMPTY_KEY)
+ : Hashing.hmacSha1(key);
}
@Override
@@ -15,7 +15,9 @@ public class ScramSha1Plus extends ScramPlusMechanism {
@Override
protected HashFunction getHMac(final byte[] key) {
- return Hashing.hmacSha1(key);
+ return (key == null || key.length == 0)
+ ? Hashing.hmacSha1(EMPTY_KEY)
+ : Hashing.hmacSha1(key);
}
@Override
@@ -19,7 +19,9 @@ public class ScramSha256 extends ScramMechanism {
@Override
protected HashFunction getHMac(final byte[] key) {
- return Hashing.hmacSha256(key);
+ return (key == null || key.length == 0)
+ ? Hashing.hmacSha256(EMPTY_KEY)
+ : Hashing.hmacSha256(key);
}
@Override
@@ -15,7 +15,9 @@ public class ScramSha256Plus extends ScramPlusMechanism {
@Override
protected HashFunction getHMac(final byte[] key) {
- return Hashing.hmacSha256(key);
+ return (key == null || key.length == 0)
+ ? Hashing.hmacSha256(EMPTY_KEY)
+ : Hashing.hmacSha256(key);
}
@Override
@@ -19,7 +19,9 @@ public class ScramSha512 extends ScramMechanism {
@Override
protected HashFunction getHMac(final byte[] key) {
- return Hashing.hmacSha512(key);
+ return (key == null || key.length == 0)
+ ? Hashing.hmacSha512(EMPTY_KEY)
+ : Hashing.hmacSha512(key);
}
@Override
@@ -15,7 +15,9 @@ public class ScramSha512Plus extends ScramPlusMechanism {
@Override
protected HashFunction getHMac(final byte[] key) {
- return Hashing.hmacSha512(key);
+ return (key == null || key.length == 0)
+ ? Hashing.hmacSha512(EMPTY_KEY)
+ : Hashing.hmacSha512(key);
}
@Override