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 boolean REMOVE_BROKEN_DEVICES = false; | ||||
| 	public static final boolean OMEMO_PADDING = false; | ||||
| 
 | ||||
| 
 | ||||
| 	public static final boolean DISABLE_PROXY_LOOKUP = false; //useful to debug ibb | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch