diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2014-11-15 15:34:50 +0100 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2014-11-15 15:34:50 +0100 |
commit | 4c504dea7ac7b0413df89ec630408b91f4abddb4 (patch) | |
tree | 5febd4d08d6bc16260a5f0148f7ef7e73293f408 /src/main/java/eu/siacs/conversations/utils/CryptoHelper.java | |
parent | e2fb32841bb0027cf878f65b52459e8df0db6404 (diff) | |
parent | 4b5d6f5b4fd29a4ee6d469f3b540dc5ba826f1a3 (diff) |
Merge pull request #665 from SamWhited/issue71
Add SCRAM-SHA1 support
Diffstat (limited to 'src/main/java/eu/siacs/conversations/utils/CryptoHelper.java')
-rw-r--r-- | src/main/java/eu/siacs/conversations/utils/CryptoHelper.java | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/main/java/eu/siacs/conversations/utils/CryptoHelper.java b/src/main/java/eu/siacs/conversations/utils/CryptoHelper.java index 11042d07c..bcc54a26a 100644 --- a/src/main/java/eu/siacs/conversations/utils/CryptoHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/CryptoHelper.java @@ -1,13 +1,14 @@ package eu.siacs.conversations.utils; import java.security.SecureRandom; +import java.text.Normalizer; public class CryptoHelper { public static final String FILETRANSFER = "?FILETRANSFERv1:"; final protected static char[] hexArray = "0123456789abcdef".toCharArray(); final protected static char[] vowels = "aeiou".toCharArray(); - final protected static char[] consonants = "bcdfghjklmnpqrstvwxyz" - .toCharArray(); + final protected static char[] consonants = "bcdfghjklmnpqrstvwxyz".toCharArray(); + final public static byte[] ONE = new byte[] { 0, 0, 0, 1 }; public static String bytesToHex(byte[] bytes) { char[] hexChars = new char[bytes.length * 2]; @@ -51,4 +52,30 @@ public class CryptoHelper { } return builder.toString(); } + + /** + * Escapes usernames or passwords for SASL. + */ + public static String saslEscape(final String s) { + final StringBuilder sb = new StringBuilder((int) (s.length() * 1.1)); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + switch (c) { + case ',': + sb.append("=2C"); + break; + case '=': + sb.append("=3D"); + break; + default: + sb.append(c); + break; + } + } + return sb.toString(); + } + + public static String saslPrep(final String s) { + return saslEscape(Normalizer.normalize(s, Normalizer.Form.NFKC)); + } } |