diff options
Diffstat (limited to 'src/main/java/de/pixart/messenger/crypto/axolotl')
3 files changed, 45 insertions, 8 deletions
diff --git a/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java b/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java index 3b3fda228..f45668c49 100644 --- a/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java +++ b/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java @@ -1115,7 +1115,18 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded { callback.onSessionBuildSuccessful(); } } - } catch (UntrustedIdentityException | InvalidKeyException e) { + } catch (UntrustedIdentityException e) { + Log.e(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Error building session for " + address + ": " + + e.getClass().getName() + ", " + e.getMessage()); + fetchStatusMap.put(address, FetchStatus.ERROR); + finishBuildingSessionsFromPEP(address); + if (oneOfOurs && cleanedOwnDeviceIds.add(address.getDeviceId())) { + removeFromDeviceAnnouncement(address.getDeviceId()); + } + if (callback != null) { + callback.onSessionBuildFailed(); + } + } catch (InvalidKeyException e) { Log.e(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Error building session for " + address + ": " + e.getClass().getName() + ", " + e.getMessage()); fetchStatusMap.put(address, FetchStatus.ERROR); 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 60aa1e357..c89ad2172 100644 --- a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java +++ b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java @@ -189,9 +189,19 @@ public class XmppAxolotlMessage { System.arraycopy(this.innerKey, 0, authtagPlusInnerKey, 0, this.innerKey.length); this.ciphertext = ciphertext; } - } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException - | IllegalBlockSizeException | BadPaddingException | NoSuchProviderException - | InvalidAlgorithmParameterException e) { + } catch (NoSuchAlgorithmException e) { + throw new CryptoFailedException(e); + } catch (NoSuchPaddingException e) { + throw new CryptoFailedException(e); + } catch (InvalidKeyException e) { + throw new CryptoFailedException(e); + } catch (IllegalBlockSizeException e) { + throw new CryptoFailedException(e); + } catch (BadPaddingException e) { + throw new CryptoFailedException(e); + } catch (NoSuchProviderException e) { + throw new CryptoFailedException(e); + } catch (InvalidAlgorithmParameterException e) { throw new CryptoFailedException(e); } } @@ -308,9 +318,19 @@ public class XmppAxolotlMessage { String plaintext = new String(cipher.doFinal(ciphertext)); plaintextMessage = new XmppAxolotlPlaintextMessage(Config.OMEMO_PADDING ? plaintext.trim() : plaintext, session.getFingerprint()); - } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException - | InvalidAlgorithmParameterException | IllegalBlockSizeException - | BadPaddingException | NoSuchProviderException e) { + } catch (NoSuchAlgorithmException e) { + throw new CryptoFailedException(e); + } catch (NoSuchPaddingException e) { + throw new CryptoFailedException(e); + } catch (InvalidKeyException e) { + throw new CryptoFailedException(e); + } catch (InvalidAlgorithmParameterException e) { + throw new CryptoFailedException(e); + } catch (IllegalBlockSizeException e) { + throw new CryptoFailedException(e); + } catch (BadPaddingException e) { + throw new CryptoFailedException(e); + } catch (NoSuchProviderException e) { throw new CryptoFailedException(e); } } diff --git a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java index 71e20676e..f7a9c0a6f 100644 --- a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java +++ b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java @@ -115,7 +115,13 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> { SignalMessage signalMessage = new SignalMessage(encryptedKey.key); try { plaintext = cipher.decrypt(signalMessage); - } catch (InvalidMessageException | NoSessionException e) { + } catch (InvalidMessageException e) { + if (iterator.hasNext()) { + Log.w(Config.LOGTAG, account.getJid().asBareJid() + ": ignoring crypto exception because possible keys left to try", e); + continue; + } + throw new BrokenSessionException(this.remoteAddress, e); + } catch (NoSessionException e) { if (iterator.hasNext()) { Log.w(Config.LOGTAG, account.getJid().asBareJid() + ": ignoring crypto exception because possible keys left to try", e); continue; |