partially improved logging for receiving omemo messages
This commit is contained in:
		
							parent
							
								
									aa7bfe9fe7
								
							
						
					
					
						commit
						8f39a594ff
					
				| @ -1136,7 +1136,12 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded { | |||||||
| 		XmppAxolotlMessage.XmppAxolotlKeyTransportMessage keyTransportMessage; | 		XmppAxolotlMessage.XmppAxolotlKeyTransportMessage keyTransportMessage; | ||||||
| 
 | 
 | ||||||
| 		XmppAxolotlSession session = getReceivingSession(message); | 		XmppAxolotlSession session = getReceivingSession(message); | ||||||
| 		keyTransportMessage = message.getParameters(session, getOwnDeviceId()); | 		try { | ||||||
|  | 			keyTransportMessage = message.getParameters(session, getOwnDeviceId()); | ||||||
|  | 		} catch (CryptoFailedException e) { | ||||||
|  | 			Log.d(Config.LOGTAG,"could not decrypt keyTransport message "+e.getMessage()); | ||||||
|  | 			keyTransportMessage = null; | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		if (session.isFresh() && keyTransportMessage != null) { | 		if (session.isFresh() && keyTransportMessage != null) { | ||||||
| 			putFreshSession(session); | 			putFreshSession(session); | ||||||
|  | |||||||
| @ -1,6 +1,11 @@ | |||||||
| package eu.siacs.conversations.crypto.axolotl; | package eu.siacs.conversations.crypto.axolotl; | ||||||
| 
 | 
 | ||||||
| public class CryptoFailedException extends Exception { | public class CryptoFailedException extends Exception { | ||||||
|  | 
 | ||||||
|  | 	public CryptoFailedException(String msg) { | ||||||
|  | 		super(msg); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	public CryptoFailedException(Exception e){ | 	public CryptoFailedException(Exception e){ | ||||||
| 		super(e); | 		super(e); | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -250,16 +250,16 @@ public class XmppAxolotlMessage { | |||||||
| 		return encryptionElement; | 		return encryptionElement; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private byte[] unpackKey(XmppAxolotlSession session, Integer sourceDeviceId) { | 	private byte[] unpackKey(XmppAxolotlSession session, Integer sourceDeviceId) throws CryptoFailedException { | ||||||
| 		XmppAxolotlSession.AxolotlKey encryptedKey = keys.get(sourceDeviceId); | 		XmppAxolotlSession.AxolotlKey encryptedKey = keys.get(sourceDeviceId); | ||||||
| 		return (encryptedKey != null) ? session.processReceiving(encryptedKey) : null; | 		if (encryptedKey == null) { | ||||||
|  | 			throw new CryptoFailedException("Message was not encrypted for this device"); | ||||||
|  | 		} | ||||||
|  | 		return session.processReceiving(encryptedKey); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public XmppAxolotlKeyTransportMessage getParameters(XmppAxolotlSession session, Integer sourceDeviceId) { | 	public XmppAxolotlKeyTransportMessage getParameters(XmppAxolotlSession session, Integer sourceDeviceId) throws CryptoFailedException { | ||||||
| 		byte[] key = unpackKey(session, sourceDeviceId); | 		return new XmppAxolotlKeyTransportMessage(session.getFingerprint(), unpackKey(session, sourceDeviceId), getIV()); | ||||||
| 		return (key != null) |  | ||||||
| 				? new XmppAxolotlKeyTransportMessage(session.getFingerprint(), key, getIV()) |  | ||||||
| 				: null; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public XmppAxolotlPlaintextMessage decrypt(XmppAxolotlSession session, Integer sourceDeviceId) throws CryptoFailedException { | 	public XmppAxolotlPlaintextMessage decrypt(XmppAxolotlSession session, Integer sourceDeviceId) throws CryptoFailedException { | ||||||
|  | |||||||
| @ -82,7 +82,7 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Nullable | 	@Nullable | ||||||
| 	public byte[] processReceiving(AxolotlKey encryptedKey) { | 	public byte[] processReceiving(AxolotlKey encryptedKey) throws CryptoFailedException { | ||||||
| 		byte[] plaintext = null; | 		byte[] plaintext = null; | ||||||
| 		FingerprintStatus status = getTrust(); | 		FingerprintStatus status = getTrust(); | ||||||
| 		if (!status.isCompromised()) { | 		if (!status.isCompromised()) { | ||||||
| @ -90,8 +90,7 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> { | |||||||
| 				try { | 				try { | ||||||
| 					PreKeyWhisperMessage message = new PreKeyWhisperMessage(encryptedKey.key); | 					PreKeyWhisperMessage message = new PreKeyWhisperMessage(encryptedKey.key); | ||||||
| 					if (!message.getPreKeyId().isPresent()) { | 					if (!message.getPreKeyId().isPresent()) { | ||||||
| 						Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "PreKeyWhisperMessage did not contain a PreKeyId"); | 						throw new CryptoFailedException("PreKeyWhisperMessage did not contain a PreKeyId"); | ||||||
| 						return null; |  | ||||||
| 					} | 					} | ||||||
| 					Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "PreKeyWhisperMessage received, new session ID:" + message.getSignedPreKeyId() + "/" + message.getPreKeyId()); | 					Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "PreKeyWhisperMessage received, new session ID:" + message.getSignedPreKeyId() + "/" + message.getPreKeyId()); | ||||||
| 					IdentityKey msgIdentityKey = message.getIdentityKey(); | 					IdentityKey msgIdentityKey = message.getIdentityKey(); | ||||||
| @ -107,19 +106,19 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> { | |||||||
| 					WhisperMessage message = new WhisperMessage(encryptedKey.key); | 					WhisperMessage message = new WhisperMessage(encryptedKey.key); | ||||||
| 					plaintext = cipher.decrypt(message); | 					plaintext = cipher.decrypt(message); | ||||||
| 				} catch (InvalidKeyException | InvalidKeyIdException | UntrustedIdentityException e) { | 				} catch (InvalidKeyException | InvalidKeyIdException | UntrustedIdentityException e) { | ||||||
| 					Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Error decrypting axolotl header, " + e.getClass().getName() + ": " + e.getMessage()); | 					throw new CryptoFailedException("Error decrypting axolotl header, \" + e.getClass().getName() + \": \" + e.getMessage()"); | ||||||
| 				} | 				} | ||||||
| 			} catch (LegacyMessageException | InvalidMessageException | DuplicateMessageException | NoSessionException e) { | 			} catch (LegacyMessageException | InvalidMessageException | DuplicateMessageException | NoSessionException e) { | ||||||
| 				Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Error decrypting axolotl header, " + e.getClass().getName() + ": " + e.getMessage()); | 				throw new CryptoFailedException("Error decrypting axolotl header, \" + e.getClass().getName() + \": \" + e.getMessage()"); | ||||||
| 			} | 			} | ||||||
| 
 | 			if (plaintext==null) { | ||||||
| 			if (plaintext != null) { | 				throw new CryptoFailedException("plaintext unexpectedly null"); | ||||||
| 				if (!status.isActive()) { | 			} | ||||||
| 					setTrust(status.toActive()); | 			if (!status.isActive()) { | ||||||
| 				} | 				setTrust(status.toActive()); | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			Log.d(Config.LOGTAG,account.getJid().toBareJid()+" not encrypting omemo message from fingerprint "+getFingerprint()+" because it was marked as compromised"); | 			throw new CryptoFailedException("not encrypting omemo message from fingerprint "+getFingerprint()+" because it was marked as compromised"); | ||||||
| 		} | 		} | ||||||
| 		return plaintext; | 		return plaintext; | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch