aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/crypto
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2016-12-25 18:37:39 +0100
committerChristian Schneppe <christian@pix-art.de>2016-12-25 18:37:39 +0100
commite5d386162fa9d497f6d09fbc33222eab61fcd3d3 (patch)
tree0e0a9843640b35e25e490d3246978f0ab29731f0 /src/main/java/de/pixart/messenger/crypto
parente9728c689d6dcc917b07662bd840bbf7ccf0a335 (diff)
added omemo padding but disabled by Config.java flag
Diffstat (limited to 'src/main/java/de/pixart/messenger/crypto')
-rw-r--r--src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java
index f49eefb5a..043cc91ff 100644
--- a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java
+++ b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java
@@ -162,7 +162,7 @@ public class XmppAxolotlMessage {
IvParameterSpec ivSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance(CIPHERMODE, PROVIDER);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
- this.ciphertext = cipher.doFinal(plaintext.getBytes());
+ this.ciphertext = cipher.doFinal(Config.OMEMO_PADDING ? getPaddedBytes(plaintext) : plaintext.getBytes());
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
| IllegalBlockSizeException | BadPaddingException | NoSuchProviderException
| InvalidAlgorithmParameterException e) {
@@ -170,6 +170,22 @@ public class XmppAxolotlMessage {
}
}
+ private static byte[] getPaddedBytes(String plaintext) {
+ int plainLength = plaintext.getBytes().length;
+ int pad = Math.max(64,(plainLength / 32 + 1) * 32) - plainLength;
+ SecureRandom random = new SecureRandom();
+ int left = random.nextInt(pad);
+ int right = pad - left;
+ StringBuilder builder = new StringBuilder(plaintext);
+ for(int i = 0; i < left; ++i) {
+ builder.insert(0,random.nextBoolean() ? "\t" : " ");
+ }
+ for(int i = 0; i < right; ++i) {
+ builder.append(random.nextBoolean() ? "\t" : " ");
+ }
+ return builder.toString().getBytes();
+ }
+
public Jid getFrom() {
return this.from;
}
@@ -239,7 +255,7 @@ public class XmppAxolotlMessage {
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
String plaintext = new String(cipher.doFinal(ciphertext));
- plaintextMessage = new XmppAxolotlPlaintextMessage(plaintext, session.getFingerprint());
+ plaintextMessage = new XmppAxolotlPlaintextMessage(Config.OMEMO_PADDING ? plaintext.trim() : plaintext, session.getFingerprint());
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
| InvalidAlgorithmParameterException | IllegalBlockSizeException