diff --git a/conversations.doap b/conversations.doap
index fa2427d14dc28ab819841180ee32dfacfd371a0f..838a248d0634881d7a600a8d182173d78bc2253b 100644
--- a/conversations.doap
+++ b/conversations.doap
@@ -494,7 +494,7 @@
complete
- 0.3.1
+ 0.4.0
diff --git a/src/main/java/eu/siacs/conversations/crypto/sasl/DowngradeProtection.java b/src/main/java/eu/siacs/conversations/crypto/sasl/DowngradeProtection.java
index 6daaa8809398e6f4aa2c7d311ed894fc0ae05299..a1934c9e0d3a791aa73f4afb06bff2f0bd4df657 100644
--- a/src/main/java/eu/siacs/conversations/crypto/sasl/DowngradeProtection.java
+++ b/src/main/java/eu/siacs/conversations/crypto/sasl/DowngradeProtection.java
@@ -9,8 +9,8 @@ import java.util.Collection;
public class DowngradeProtection {
- private static final char SEPARATOR = ',';
- private static final char SEPARATOR_MECHANISM_AND_BINDING = '|';
+ private static final char SEPARATOR = 0x1E;
+ private static final char SEPARATOR_MECHANISM_AND_BINDING = 0x1F;
public final ImmutableList mechanisms;
public final ImmutableList channelBindings;
@@ -26,7 +26,7 @@ public class DowngradeProtection {
this.channelBindings = null;
}
- public String asDString() {
+ public String asHString() {
ensureSaslMechanismFormat(this.mechanisms);
ensureNoSeparators(this.mechanisms);
if (this.channelBindings != null) {
diff --git a/src/main/java/eu/siacs/conversations/crypto/sasl/ScramMechanism.java b/src/main/java/eu/siacs/conversations/crypto/sasl/ScramMechanism.java
index 97ae1600ecfe8a95d4d34b7fc8253174110f3b84..0ee9b879c40fce893ab391d1182e727c8e9a86f7 100644
--- a/src/main/java/eu/siacs/conversations/crypto/sasl/ScramMechanism.java
+++ b/src/main/java/eu/siacs/conversations/crypto/sasl/ScramMechanism.java
@@ -183,7 +183,7 @@ public abstract class ScramMechanism extends SaslMechanism {
final String i = attributes.get("i");
final String s = attributes.get("s");
final String nonce = attributes.get("r");
- final String d = attributes.get("d");
+ final String h = attributes.get("h");
if (Strings.isNullOrEmpty(s) || Strings.isNullOrEmpty(nonce) || Strings.isNullOrEmpty(i)) {
throw new AuthenticationException("Missing attributes from server first message");
}
@@ -205,15 +205,15 @@ public abstract class ScramMechanism extends SaslMechanism {
throw new AuthenticationException("Invalid salt in server first message");
}
- if (d != null && this.downgradeProtection != null) {
+ if (h != null && this.downgradeProtection != null) {
final String asSeenInFeatures;
try {
- asSeenInFeatures = downgradeProtection.asDString();
+ asSeenInFeatures = downgradeProtection.asHString();
} catch (final SecurityException e) {
throw new AuthenticationException(e);
}
final var hashed = BaseEncoding.base64().encode(digest(asSeenInFeatures.getBytes()));
- if (!hashed.equals(d)) {
+ if (!hashed.equals(h)) {
throw new AuthenticationException("Mismatch in SSDP");
}
}