aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/utils/CryptoHelper.java
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2014-11-15 15:34:50 +0100
committerDaniel Gultsch <daniel@gultsch.de>2014-11-15 15:34:50 +0100
commit4c504dea7ac7b0413df89ec630408b91f4abddb4 (patch)
tree5febd4d08d6bc16260a5f0148f7ef7e73293f408 /src/main/java/eu/siacs/conversations/utils/CryptoHelper.java
parente2fb32841bb0027cf878f65b52459e8df0db6404 (diff)
parent4b5d6f5b4fd29a4ee6d469f3b540dc5ba826f1a3 (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.java31
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 11042d07..bcc54a26 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));
+ }
}