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"); } }