added omemo padding but disabled by Config.java flag
This commit is contained in:
parent
fbbf1a37b4
commit
e5fff42b10
|
@ -82,6 +82,7 @@ public final class Config {
|
||||||
|
|
||||||
public static final long OMEMO_AUTO_EXPIRY = 7 * MILLISECONDS_IN_DAY;
|
public static final long OMEMO_AUTO_EXPIRY = 7 * MILLISECONDS_IN_DAY;
|
||||||
public static final boolean REMOVE_BROKEN_DEVICES = false;
|
public static final boolean REMOVE_BROKEN_DEVICES = false;
|
||||||
|
public static final boolean OMEMO_PADDING = false;
|
||||||
|
|
||||||
|
|
||||||
public static final boolean DISABLE_PROXY_LOOKUP = false; //useful to debug ibb
|
public static final boolean DISABLE_PROXY_LOOKUP = false; //useful to debug ibb
|
||||||
|
|
|
@ -162,7 +162,7 @@ public class XmppAxolotlMessage {
|
||||||
IvParameterSpec ivSpec = new IvParameterSpec(iv);
|
IvParameterSpec ivSpec = new IvParameterSpec(iv);
|
||||||
Cipher cipher = Cipher.getInstance(CIPHERMODE, PROVIDER);
|
Cipher cipher = Cipher.getInstance(CIPHERMODE, PROVIDER);
|
||||||
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
|
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
|
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
|
||||||
| IllegalBlockSizeException | BadPaddingException | NoSuchProviderException
|
| IllegalBlockSizeException | BadPaddingException | NoSuchProviderException
|
||||||
| InvalidAlgorithmParameterException e) {
|
| 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() {
|
public Jid getFrom() {
|
||||||
return this.from;
|
return this.from;
|
||||||
}
|
}
|
||||||
|
@ -239,7 +255,7 @@ public class XmppAxolotlMessage {
|
||||||
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
|
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
|
||||||
|
|
||||||
String plaintext = new String(cipher.doFinal(ciphertext));
|
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
|
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
|
||||||
| InvalidAlgorithmParameterException | IllegalBlockSizeException
|
| InvalidAlgorithmParameterException | IllegalBlockSizeException
|
||||||
|
|
Loading…
Reference in a new issue