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 New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch