diff options
author | Christian Schneppe <christian@pix-art.de> | 2019-09-03 20:31:32 +0200 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2019-09-03 20:31:32 +0200 |
commit | be82ac563323ed83427b3ad692650c8283ce5338 (patch) | |
tree | 53dfcd82ec65e0b523c3790c3b57539a2aa0442b /src/main/java/de/pixart/messenger/crypto | |
parent | 4aa24e84c49348f8d96c273f77a636557dbb40a2 (diff) |
fix some crashes
Diffstat (limited to '')
5 files changed, 51 insertions, 10 deletions
diff --git a/src/main/java/de/pixart/messenger/crypto/OtrService.java b/src/main/java/de/pixart/messenger/crypto/OtrService.java index f355ac348..cf41ec26f 100644 --- a/src/main/java/de/pixart/messenger/crypto/OtrService.java +++ b/src/main/java/de/pixart/messenger/crypto/OtrService.java @@ -95,7 +95,9 @@ public class OtrService extends OtrCryptoEngineImpl implements OtrEngineHost { this.account.setKey("otr_p", privateKeySpec.getP().toString(16)); this.account.setKey("otr_q", privateKeySpec.getQ().toString(16)); this.account.setKey("otr_y", publicKeySpec.getY().toString(16)); - } catch (final NoSuchAlgorithmException | InvalidKeySpecException e) { + } catch (final NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (final InvalidKeySpecException e) { e.printStackTrace(); } 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; diff --git a/src/main/java/de/pixart/messenger/crypto/sasl/ScramMechanism.java b/src/main/java/de/pixart/messenger/crypto/sasl/ScramMechanism.java index e1a153ef6..4a6fa42e5 100644 --- a/src/main/java/de/pixart/messenger/crypto/sasl/ScramMechanism.java +++ b/src/main/java/de/pixart/messenger/crypto/sasl/ScramMechanism.java @@ -43,7 +43,9 @@ abstract class ScramMechanism extends SaslMechanism { clientKey = hmac(saltedPassword, CLIENT_KEY_BYTES); return new KeyPair(clientKey, serverKey); - } catch (final InvalidKeyException | NumberFormatException e) { + } catch (final InvalidKeyException e) { + return null; + } catch (final NumberFormatException e) { return null; } } |