aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/crypto/axolotl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java13
-rw-r--r--src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java32
-rw-r--r--src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java8
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;