From a8b2446042f987f1881f1b3cf4db20a01aabb800 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 13 Dec 2019 18:25:46 +0100 Subject: [PATCH 1/5] Fix javadoc issues --- .../omemo/signal/SignalOmemoRatchet.java | 1 - .../signal/SignalOmemoStoreConnector.java | 5 ++- .../smackx/omemo/CachingOmemoStore.java | 16 ++++---- .../smackx/omemo/FileBasedOmemoStore.java | 3 +- .../smackx/omemo/OmemoConfiguration.java | 8 ++-- .../smackx/omemo/OmemoInitializer.java | 2 +- .../smackx/omemo/OmemoManager.java | 34 ++++++++------- .../smackx/omemo/OmemoMessage.java | 8 ++-- .../smackx/omemo/OmemoService.java | 41 ++++++++++--------- .../jivesoftware/smackx/omemo/OmemoStore.java | 26 ++++++++---- .../omemo/element/OmemoBundleElement.java | 2 +- .../element/OmemoBundleElement_VAxolotl.java | 5 ++- .../smackx/omemo/element/OmemoElement.java | 2 +- .../CannotEstablishOmemoSessionException.java | 3 +- .../MultipleCryptoFailedException.java | 3 -- .../exceptions/ReadOnlyDeviceException.java | 3 +- .../exceptions/StaleDeviceException.java | 4 +- .../omemo/internal/CiphertextTuple.java | 4 +- .../smackx/omemo/internal/OmemoDevice.java | 4 +- .../smackx/omemo/trust/TrustState.java | 15 +++++-- .../smackx/omemo/util/OmemoConstants.java | 1 - .../smackx/omemo/util/OmemoKeyUtil.java | 23 +++++++---- .../omemo/util/OmemoMessageBuilder.java | 11 ++--- 23 files changed, 126 insertions(+), 98 deletions(-) diff --git a/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalOmemoRatchet.java b/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalOmemoRatchet.java index c219b6f14..6ab4311f8 100644 --- a/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalOmemoRatchet.java +++ b/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalOmemoRatchet.java @@ -149,7 +149,6 @@ public class SignalOmemoRatchet throw new AssertionError("Signals trust management MUST be disabled."); } - // TODO: Figure out, if this is enough... int type = ciphertextMessage.getType() == CiphertextMessage.PREKEY_TYPE ? OmemoElement.TYPE_OMEMO_PREKEY_MESSAGE : OmemoElement.TYPE_OMEMO_MESSAGE; diff --git a/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalOmemoStoreConnector.java b/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalOmemoStoreConnector.java index 751dcc830..69b43927c 100644 --- a/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalOmemoStoreConnector.java +++ b/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalOmemoStoreConnector.java @@ -87,8 +87,9 @@ public class SignalOmemoStoreConnector } /** - * We don't use this. - * @return dummy TODO javadoc me please + * The OMEMO protocol does not make use of a local registration ID, so we can simply return 0 here. + * + * @return local registration id. */ @Override public int getLocalRegistrationId() { diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/CachingOmemoStore.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/CachingOmemoStore.java index d2fd9966b..780951243 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/CachingOmemoStore.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/CachingOmemoStore.java @@ -437,8 +437,9 @@ public class CachingOmemoStore getCache(OmemoDevice device) { KeyCache cache = caches.get(device); @@ -451,11 +452,12 @@ public class CachingOmemoStore - * @param - * @param - * @param - * @param + * + * @param type of the identity key pair + * @param type of the public identity key + * @param type of a public preKey + * @param type of the public signed preKey + * @param type of the OMEMO session */ private static class KeyCache { private T_IdKeyPair identityKeyPair; diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/FileBasedOmemoStore.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/FileBasedOmemoStore.java index d8b1df42c..62b742db5 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/FileBasedOmemoStore.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/FileBasedOmemoStore.java @@ -45,6 +45,7 @@ import org.jxmpp.jid.BareJid; /** * Like a rocket! + * Implementation of the {@link OmemoStore} class that uses plain files for storage. * * @author Paul Schaub */ @@ -514,7 +515,7 @@ public abstract class FileBasedOmemoStoreBlog Post explaining the danger of read-only devices. TODO: Add URL + * @see Blog Post explaining the danger of read-only devices. */ public static void setIgnoreReadOnlyDevices(boolean ignore) { IGNORE_READ_ONLY_DEVICES = ignore; @@ -40,7 +40,7 @@ public final class OmemoConfiguration { * Return true, if the client should stop encrypting messages to a read-only device. * * @return true if read-only devices should get ignored after a certain amount of unanswered messages. - * @see Blog Post explaining the danger of read-only devices. TODO: Add URL + * @see Blog Post explaining the danger of read-only devices. */ public static boolean getIgnoreReadOnlyDevices() { return IGNORE_READ_ONLY_DEVICES; @@ -53,7 +53,7 @@ public final class OmemoConfiguration { * This threshold is used to prevent read-only devices from weakening forward secrecy. * * @param maxReadOnlyMessageCount maximum number of allowed messages to a read-only device. - * @see Blog Post explaining the danger of read-only devices. TODO: Add URL + * @see Blog Post explaining the danger of read-only devices. */ public static void setMaxReadOnlyMessageCount(int maxReadOnlyMessageCount) { if (maxReadOnlyMessageCount <= 0) { @@ -69,7 +69,7 @@ public final class OmemoConfiguration { * This threshold is used to prevent read-only devices from weakening forward secrecy. * * @return maximum number of allowed messages to a read-only device. - * @see Blog Post explaining the danger of read-only devices. TODO: Add URL + * @see Blog Post explaining the danger of read-only devices. */ public static int getMaxReadOnlyMessageCount() { return MAX_READ_ONLY_MESSAGE_COUNT; diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoInitializer.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoInitializer.java index 5f293490f..a5d1836ad 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoInitializer.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoInitializer.java @@ -19,7 +19,7 @@ package org.jivesoftware.smackx.omemo; import org.jivesoftware.smack.initializer.UrlInitializer; /** - * Initializer class that registers omemo providers. + * Initializer class that registers OMEMO providers. * * @author Paul Schaub */ diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoManager.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoManager.java index a3d2ff48d..71d80d478 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoManager.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoManager.java @@ -151,7 +151,7 @@ public final class OmemoManager extends Manager { * @param connection XmppConnection. * @param deviceId MUST NOT be null and MUST be greater than 0. * - * @return manager TODO javadoc me please + * @return OmemoManager instance for the given connection and deviceId. */ public static synchronized OmemoManager getInstanceFor(XMPPConnection connection, Integer deviceId) { if (deviceId == null || deviceId < 1) { @@ -182,7 +182,7 @@ public final class OmemoManager extends Manager { * * @param connection XmppConnection. * - * @return manager TODO javadoc me please + * @return OmemoManager instance for the given connection and a determined deviceId. */ public static synchronized OmemoManager getInstanceFor(XMPPConnection connection) { TreeMap managers = INSTANCES.get(connection); @@ -219,7 +219,8 @@ public final class OmemoManager extends Manager { /** * Return the TrustCallback of this manager. - * @return + * + * @return callback that is used for trust decisions. */ OmemoTrustCallback getTrustCallback() { return trustCallback; @@ -530,10 +531,11 @@ public final class OmemoManager extends Manager { * * @param multiUserChat MUC * @return true if chat supports OMEMO - * @throws XMPPException.XMPPErrorException if - * @throws SmackException.NotConnectedException something - * @throws InterruptedException goes - * @throws SmackException.NoResponseException wrong + * + * @throws XMPPException.XMPPErrorException if there was an XMPP protocol level error + * @throws SmackException.NotConnectedException if the connection is not connected + * @throws InterruptedException if the thread is interrupted + * @throws SmackException.NoResponseException if the server does not respond */ public boolean multiUserChatSupportsOmemo(MultiUserChat multiUserChat) throws XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException, @@ -564,7 +566,8 @@ public final class OmemoManager extends Manager { /** * Return the fingerprint of our identity key. * - * @return fingerprint TODO javadoc me please + * @return our own OMEMO fingerprint + * * @throws SmackException.NotLoggedInException if we don't know our bareJid yet. * @throws CorruptedOmemoKeyException if our identityKey is corrupted. * @throws IOException if an I/O error occurred. @@ -580,8 +583,10 @@ public final class OmemoManager extends Manager { /** * Get the fingerprint of a contacts device. + * * @param device contacts OmemoDevice - * @return fingerprint TODO javadoc me please + * @return fingerprint of the given OMEMO device. + * * @throws CannotEstablishOmemoSessionException if we have no session yet, and are unable to create one. * @throws SmackException.NotLoggedInException if the XMPP connection is not authenticated. * @throws CorruptedOmemoKeyException if the copy of the fingerprint we have is corrupted. @@ -763,7 +768,8 @@ public final class OmemoManager extends Manager { /** * Returns a pseudo random number from the interval [1, Integer.MAX_VALUE]. - * @return deviceId TODO javadoc me please + * + * @return a random deviceId. */ public static int randomDeviceId() { return new Random().nextInt(Integer.MAX_VALUE - 1) + 1; @@ -772,7 +778,7 @@ public final class OmemoManager extends Manager { /** * Return the BareJid of the user. * - * @return bareJid TODO javadoc me please + * @return our own bare JID. */ public BareJid getOwnJid() { if (ownJid == null && connection().isAuthenticated()) { @@ -785,7 +791,7 @@ public final class OmemoManager extends Manager { /** * Return the deviceId of this OmemoManager. * - * @return deviceId TODO javadoc me please + * @return this OmemoManagers deviceId. */ public synchronized Integer getDeviceId() { return deviceId; @@ -794,7 +800,7 @@ public final class OmemoManager extends Manager { /** * Return the OmemoDevice of the user. * - * @return omemoDevice TODO javadoc me please + * @return our own OmemoDevice */ public synchronized OmemoDevice getOwnDevice() { BareJid jid = getOwnJid(); @@ -926,7 +932,7 @@ public final class OmemoManager extends Manager { /** * Return the OMEMO service object. * - * @return omemoService TODO javadoc me please + * @return the OmemoService object related to this OmemoManager. */ OmemoService getOmemoService() { throwIfNoServiceSet(); diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoMessage.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoMessage.java index 2d5554e7f..a1486d900 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoMessage.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoMessage.java @@ -49,7 +49,7 @@ public class OmemoMessage { /** * Return the original OmemoElement (<encrypted/>). * - * @return omemoElement TODO javadoc me please + * @return omemoElement of the message */ public OmemoElement getElement() { return element; @@ -58,7 +58,7 @@ public class OmemoMessage { /** * Return the messageKey (or transported key in case of a KeyTransportMessage). * - * @return key TODO javadoc me please + * @return encryption key that protects the message payload */ public byte[] getKey() { return messageKey.clone(); @@ -66,6 +66,7 @@ public class OmemoMessage { /** * Return the initialization vector belonging to the key. + * * @return initialization vector */ public byte[] getIv() { @@ -189,7 +190,8 @@ public class OmemoMessage { /** * Return the OmemoDevice which sent the message. - * @return senderDevice TODO javadoc me please + * + * @return OMEMO device that sent the message. */ public OmemoDevice getSenderDevice() { return senderDevice; diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoService.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoService.java index 372579b61..f9a01f108 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoService.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoService.java @@ -107,17 +107,11 @@ public abstract class OmemoService INSTANCE; private OmemoStore omemoStore; private final HashMap> omemoRatchets = new HashMap<>(); - /** - * Create a new OmemoService object. This should only happen once. - */ protected OmemoService() { } @@ -229,7 +223,7 @@ public abstract class OmemoService decryptMamQueryResult(OmemoManager.LoggedInOmemoManager managerGuard, @@ -1326,8 +1325,10 @@ public abstract class OmemoService getPreKeys() { if (preKeys == null) { diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoBundleElement_VAxolotl.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoBundleElement_VAxolotl.java index 945a6611f..736afa37d 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoBundleElement_VAxolotl.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoBundleElement_VAxolotl.java @@ -21,8 +21,9 @@ import static org.jivesoftware.smackx.omemo.util.OmemoConstants.OMEMO_NAMESPACE_ import java.util.HashMap; /** - * OMEMO device bundle as described here: - * https://xmpp.org/extensions/xep-0384.html#usecases-announcing (Example 3). + * OMEMO device bundle as described by the protocol. + * + * @see XEP-0384: OMEMO Encryption (Example 3). * * @author Paul Schaub */ diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoElement.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoElement.java index 6d28da919..fea020003 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoElement.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoElement.java @@ -55,7 +55,7 @@ public abstract class OmemoElement implements ExtensionElement { /** * Return the payload of the message. * - * @return payload TODO javadoc me please + * @return encrypted payload of the message. */ public byte[] getPayload() { if (payload == null) { diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/CannotEstablishOmemoSessionException.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/CannotEstablishOmemoSessionException.java index e20782632..2d4e65513 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/CannotEstablishOmemoSessionException.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/CannotEstablishOmemoSessionException.java @@ -79,7 +79,8 @@ public class CannotEstablishOmemoSessionException extends Exception { /** * Return true, if there is at least one recipient, which would not be able to decipher the message on any of * their devices. - * @return boolean TODO javadoc me please + * + * @return true if the exception requires to be thrown */ public boolean requiresThrowing() { for (Map.Entry> entry : failures.entrySet()) { diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/MultipleCryptoFailedException.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/MultipleCryptoFailedException.java index 8627823f9..8a890cca0 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/MultipleCryptoFailedException.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/MultipleCryptoFailedException.java @@ -22,9 +22,6 @@ import java.util.List; public final class MultipleCryptoFailedException extends CryptoFailedException { - /** - * - */ private static final long serialVersionUID = 1L; private final List cryptoFailedExceptions; diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/ReadOnlyDeviceException.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/ReadOnlyDeviceException.java index ce69d1a30..cc82bc365 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/ReadOnlyDeviceException.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/ReadOnlyDeviceException.java @@ -44,7 +44,8 @@ public class ReadOnlyDeviceException extends Exception { /** * Return the device in question. - * @return device TODO javadoc me please + * + * @return device that is read-only. */ public OmemoDevice getDevice() { return device; diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/StaleDeviceException.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/StaleDeviceException.java index c3453b99e..d3110f0a8 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/StaleDeviceException.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/exceptions/StaleDeviceException.java @@ -31,8 +31,8 @@ public class StaleDeviceException extends Exception { * This exception gets thrown if a message cannot be encrypted for a device due to the device being inactive for too long (stale). * * @param device OmemoDevice. - * @param lastMessageDate TODO javadoc me please - * @param lastDeviceIdPublicationDate TODO javadoc me please + * @param lastMessageDate date of the last received message from the device. + * @param lastDeviceIdPublicationDate date on which the device ID was last published via pubsub. */ public StaleDeviceException(OmemoDevice device, Date lastMessageDate, Date lastDeviceIdPublicationDate) { this.device = device; diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/internal/CiphertextTuple.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/internal/CiphertextTuple.java index 60fac8469..32483d17c 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/internal/CiphertextTuple.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/internal/CiphertextTuple.java @@ -41,7 +41,7 @@ public class CiphertextTuple { /** * Return the ciphertext. * - * @return ciphertext TODO javadoc me please + * @return ciphertext part of the tuple */ public byte[] getCiphertext() { return ciphertext; @@ -50,7 +50,7 @@ public class CiphertextTuple { /** * Return the messageType. * - * @return messageType TODO javadoc me please + * @return type of the message */ public int getMessageType() { return this.messageType; diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/internal/OmemoDevice.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/internal/OmemoDevice.java index 762494281..11041f0c2 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/internal/OmemoDevice.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/internal/OmemoDevice.java @@ -43,7 +43,7 @@ public class OmemoDevice { /** * Return the BareJid of the device owner. * - * @return bareJid TODO javadoc me please + * @return bare JID of the device owner. */ public BareJid getJid() { return this.jid; @@ -52,7 +52,7 @@ public class OmemoDevice { /** * Return the OMEMO device Id of the device. * - * @return deviceId TODO javadoc me please + * @return OMEMO device ID. */ public int getDeviceId() { return this.deviceId; diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/trust/TrustState.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/trust/TrustState.java index 605298c26..8ad2d2ae0 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/trust/TrustState.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/trust/TrustState.java @@ -17,7 +17,16 @@ package org.jivesoftware.smackx.omemo.trust; public enum TrustState { - undecided, // User has yet to decide, whether the identity is trusted or not. - untrusted, // User decided NOT to trust this device. - trusted // User decided to trust this device. + /** + * User has yet to decide, whether the identity is trusted or not. + */ + undecided, + /** + * User decided NOT to trust this device. + */ + untrusted, + /** + * User decided to trust this device. + */ + trusted } diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoConstants.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoConstants.java index 885260568..f72630bac 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoConstants.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoConstants.java @@ -22,7 +22,6 @@ package org.jivesoftware.smackx.omemo.util; */ public final class OmemoConstants { - // Constants /** * Omemo related namespace. */ diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoKeyUtil.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoKeyUtil.java index 1954246f1..163fb06cf 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoKeyUtil.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoKeyUtil.java @@ -55,7 +55,8 @@ public abstract class OmemoKeyUtil ratchet, String message) throws NoSuchPaddingException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, IllegalBlockSizeException, - UnsupportedEncodingException, InvalidAlgorithmParameterException { + InvalidAlgorithmParameterException { this(userDevice, callback, ratchet, generateKey(KEYTYPE, KEYLENGTH), generateIv(), message); } @@ -148,7 +144,6 @@ public class OmemoMessageBuilder Date: Fri, 13 Dec 2019 18:26:40 +0100 Subject: [PATCH 2/5] Avoid returning empty set of deviceIds in caching store --- .../org/jivesoftware/smackx/omemo/CachingOmemoStore.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/CachingOmemoStore.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/CachingOmemoStore.java index 780951243..766141b5c 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/CachingOmemoStore.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/CachingOmemoStore.java @@ -75,7 +75,13 @@ public class CachingOmemoStore(); //TODO: ? + SortedSet deviceIds = new TreeSet<>(); + for (OmemoDevice device : caches.keySet()) { + if (device.getJid().equals(localUser)) { + deviceIds.add(device.getDeviceId()); + } + } + return deviceIds; } } From 85ff749d89d2d14e038880150dabc05761c7b39b Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 13 Dec 2019 18:28:09 +0100 Subject: [PATCH 3/5] Use StringBuilder instead of String concatenation --- .../smackx/omemo/element/OmemoBundleElement.java | 16 +++++++++------- .../omemo/element/OmemoDeviceListElement.java | 11 ++++++++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoBundleElement.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoBundleElement.java index 060435320..308a35e87 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoBundleElement.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoBundleElement.java @@ -209,15 +209,17 @@ public abstract class OmemoBundleElement implements ExtensionElement { @Override public String toString() { - String out = "OmemoBundleElement[\n"; - out += SIGNED_PRE_KEY_PUB + " " + SIGNED_PRE_KEY_ID + "=" + signedPreKeyId + ": " + signedPreKeyB64 + "\n"; - out += SIGNED_PRE_KEY_SIG + ": " + signedPreKeySignatureB64 + "\n"; - out += IDENTITY_KEY + ": " + identityKeyB64 + "\n"; - out += PRE_KEYS + " (" + preKeysB64.size() + ")\n"; + StringBuilder sb = new StringBuilder("OmemoBundleElement[\n"); + sb.append(SIGNED_PRE_KEY_PUB).append(' ').append(SIGNED_PRE_KEY_ID).append('=').append(signedPreKeyId) + .append(':').append(signedPreKeyB64).append('\n') + .append(SIGNED_PRE_KEY_SIG).append(": ").append(signedPreKeySignatureB64).append('\n') + .append(IDENTITY_KEY).append(": ").append(identityKeyB64).append('\n') + .append(PRE_KEYS).append(" (").append(preKeysB64.size()).append(")\n"); for (Map.Entry e : preKeysB64.entrySet()) { - out += PRE_KEY_PUB + " " + PRE_KEY_ID + "=" + e.getKey() + ": " + e.getValue() + "\n"; + sb.append(PRE_KEY_PUB).append(' ').append(PRE_KEY_ID).append("=").append(e.getKey()).append(": ").append(e.getValue()).append("\n"); } - return out; + sb.append("]"); + return sb.toString(); } @Override diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoDeviceListElement.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoDeviceListElement.java index 2b2515cb4..8644586d0 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoDeviceListElement.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoDeviceListElement.java @@ -18,6 +18,7 @@ package org.jivesoftware.smackx.omemo.element; import java.util.Collections; import java.util.HashSet; +import java.util.Iterator; import java.util.Set; import org.jivesoftware.smack.packet.ExtensionElement; @@ -78,10 +79,14 @@ public abstract class OmemoDeviceListElement implements ExtensionElement { @Override public final String toString() { - String out = "OmemoDeviceListElement["; + StringBuilder sb = new StringBuilder("OmemoDeviceListElement["); + Iterator iterator = deviceIds.iterator(); for (int i : deviceIds) { - out += i + ","; + sb.append(i); + if (iterator.hasNext()) { + sb.append(','); + } } - return out.substring(0, out.length() - 1) + "]"; + return sb.append(']').toString(); } } From 6d0bf04c1eb7f309a568ad99973eea02e8ea692a Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 13 Dec 2019 18:30:43 +0100 Subject: [PATCH 4/5] Improve Javadoc readability by adding separating lines --- .../omemo/signal/SignalCachingOmemoStore.java | 1 + .../smackx/omemo/OmemoManager.java | 19 ++++++++++++ .../smackx/omemo/OmemoMessage.java | 9 ++++++ .../smackx/omemo/OmemoRatchet.java | 2 ++ .../smackx/omemo/OmemoService.java | 23 +++++++++++++++ .../jivesoftware/smackx/omemo/OmemoStore.java | 29 +++++++++++++++++++ .../exceptions/StaleDeviceException.java | 3 ++ .../UntrustedOmemoIdentityException.java | 1 + .../listener/OmemoMucMessageListener.java | 2 ++ .../smackx/omemo/util/OmemoConstants.java | 1 + .../smackx/omemo/util/OmemoKeyUtil.java | 9 ++++++ .../omemo/util/OmemoMessageBuilder.java | 4 +++ 12 files changed, 103 insertions(+) diff --git a/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalCachingOmemoStore.java b/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalCachingOmemoStore.java index 084d95f2b..135bd96fb 100644 --- a/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalCachingOmemoStore.java +++ b/smack-omemo-signal/src/main/java/org/jivesoftware/smackx/omemo/signal/SignalCachingOmemoStore.java @@ -44,6 +44,7 @@ public class SignalCachingOmemoStore extends CachingOmemoStore getDevicesOf(BareJid contact) throws IOException { @@ -300,6 +303,7 @@ public final class OmemoManager extends Manager { * @param recipient recipients bareJid * @param message text to encrypt * @return encrypted message + * * @throws CryptoFailedException when something crypto related fails * @throws UndecidedOmemoIdentityException When there are undecided devices * @throws InterruptedException if the calling thread was interrupted. @@ -323,6 +327,7 @@ public final class OmemoManager extends Manager { * @param recipients recipients barejids * @param message text to encrypt * @return encrypted message. + * * @throws CryptoFailedException When something crypto related fails * @throws UndecidedOmemoIdentityException When there are undecided devices. * @throws InterruptedException if the calling thread was interrupted. @@ -349,6 +354,7 @@ public final class OmemoManager extends Manager { * @param muc multiUserChat * @param message message to send * @return encrypted message + * * @throws UndecidedOmemoIdentityException when there are undecided devices. * @throws CryptoFailedException if the OMEMO cryptography failed. * @throws XMPPException.XMPPErrorException if there was an XMPP error returned. @@ -403,6 +409,7 @@ public final class OmemoManager extends Manager { * * @param mamQuery The MAM query * @return list of decrypted OmemoMessages + * * @throws SmackException.NotLoggedInException if the Manager is not authenticated. * @throws IOException if an I/O error occurred. */ @@ -431,6 +438,7 @@ public final class OmemoManager extends Manager { * Distrust the fingerprint/OmemoDevice tuple. * The fingerprint must be the lowercase, hexadecimal fingerprint of the identityKey of the device and must * be of length 64. + * * @param device device * @param fingerprint fingerprint */ @@ -446,6 +454,7 @@ public final class OmemoManager extends Manager { * Returns true, if the fingerprint/OmemoDevice tuple is trusted, otherwise false. * The fingerprint must be the lowercase, hexadecimal fingerprint of the identityKey of the device and must * be of length 64. + * * @param device device * @param fingerprint fingerprint * @return true if this is a trusted OMEMO identity. @@ -462,6 +471,7 @@ public final class OmemoManager extends Manager { * Returns true, if the fingerprint/OmemoDevice tuple is decided by the user. * The fingerprint must be the lowercase, hexadecimal fingerprint of the identityKey of the device and must * be of length 64. + * * @param device device * @param fingerprint fingerprint * @return true if the trust is decided for the identity. @@ -479,6 +489,7 @@ public final class OmemoManager extends Manager { * secrecy. * * @param recipient recipient + * * @throws CorruptedOmemoKeyException When the used identityKeys are corrupted * @throws CryptoFailedException When something fails with the crypto * @throws CannotEstablishOmemoSessionException When we can't establish a session with the recipient @@ -511,6 +522,7 @@ public final class OmemoManager extends Manager { * * @param contact contact * @return true if contact has at least one OMEMO capable device. + * * @throws SmackException.NotConnectedException if the XMPP connection is not connected. * @throws InterruptedException if the calling thread was interrupted. * @throws SmackException.NoResponseException if there was no response from the remote entity. @@ -551,6 +563,7 @@ public final class OmemoManager extends Manager { * @param connection XMPPConnection * @param server domainBareJid of the server to test * @return true if server supports pep + * * @throws XMPPException.XMPPErrorException if there was an XMPP error returned. * @throws SmackException.NotConnectedException if the XMPP connection is not connected. * @throws InterruptedException if the calling thread was interrupted. @@ -614,6 +627,7 @@ public final class OmemoManager extends Manager { /** * Return all OmemoFingerprints of active devices of a contact. * TODO: Make more fail-safe + * * @param contact contact * @return Map of all active devices of the contact and their fingerprints. * @@ -661,6 +675,7 @@ public final class OmemoManager extends Manager { /** * Remove an OmemoMessageListener. + * * @param listener OmemoMessageListener */ public void removeOmemoMessageListener(OmemoMessageListener listener) { @@ -678,6 +693,7 @@ public final class OmemoManager extends Manager { /** * Remove an OmemoMucMessageListener. + * * @param listener OmemoMucMessageListener */ public void removeOmemoMucMessageListener(OmemoMucMessageListener listener) { @@ -688,6 +704,7 @@ public final class OmemoManager extends Manager { * Request a deviceList update from contact contact. * * @param contact contact we want to obtain the deviceList from. + * * @throws InterruptedException if the calling thread was interrupted. * @throws PubSubException.NotALeafNodeException if a PubSub leaf node operation was attempted on a non-leaf node. * @throws XMPPException.XMPPErrorException if there was an XMPP error returned. @@ -750,6 +767,7 @@ public final class OmemoManager extends Manager { /** * Return true, if the given Stanza contains an OMEMO element 'encrypted'. + * * @param stanza stanza * @return true if stanza has extension 'encrypted' */ @@ -812,6 +830,7 @@ public final class OmemoManager extends Manager { /** * Set the deviceId of the manager to nDeviceId. + * * @param nDeviceId new deviceId */ synchronized void setDeviceId(int nDeviceId) { diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoMessage.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoMessage.java index a1486d900..e2eb8635a 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoMessage.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoMessage.java @@ -82,6 +82,7 @@ public class OmemoMessage { /** * Create a new outgoing OMEMO message. + * * @param element OmemoElement * @param key messageKey (or transported key) * @param iv initialization vector belonging to key @@ -97,6 +98,7 @@ public class OmemoMessage { /** * Return a list of all devices the sender originally intended to encrypt the message for. + * * @return list of intended recipients. */ public Set getIntendedDevices() { @@ -105,6 +107,7 @@ public class OmemoMessage { /** * Return a map of all skipped recipients and the reasons for skipping. + * * @return map of skipped recipients and reasons for that. */ public HashMap getSkippedDevices() { @@ -113,6 +116,7 @@ public class OmemoMessage { /** * Determine, if some recipients were skipped during encryption. + * * @return true if recipients were skipped. */ public boolean isMissingRecipients() { @@ -156,6 +160,7 @@ public class OmemoMessage { /** * Create a new incoming OMEMO message. + * * @param element original OmemoElement * @param key message key (or transported key) * @param iv respective initialization vector @@ -174,6 +179,7 @@ public class OmemoMessage { /** * Return the decrypted body of the message. + * * @return decrypted body */ public String getBody() { @@ -182,6 +188,7 @@ public class OmemoMessage { /** * Return the fingerprint of the messages sender device. + * * @return fingerprint of sender */ public OmemoFingerprint getSendersFingerprint() { @@ -199,6 +206,7 @@ public class OmemoMessage { /** * Return true, if this message was sent as a preKeyMessage. + * * @return preKeyMessage or not */ boolean isPreKeyMessage() { @@ -208,6 +216,7 @@ public class OmemoMessage { /** * Return true, if the message was a KeyTransportMessage. * A KeyTransportMessage is a OmemoMessage without a payload. + * * @return keyTransportMessage? */ public boolean isKeyTransportMessage() { diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoRatchet.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoRatchet.java index e00815283..838784806 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoRatchet.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoRatchet.java @@ -86,6 +86,7 @@ public abstract class OmemoRatchet Elliptic Curve PublicKey class * @param Bundle class * @param Cipher class + * * @author Paul Schaub */ public abstract class OmemoService @@ -113,10 +114,12 @@ public abstract class OmemoService> omemoRatchets = new HashMap<>(); protected OmemoService() { + } /** * Return the singleton instance of this class. When no instance is set, throw an IllegalStateException instead. + * * @return instance. */ public static OmemoService getInstance() { @@ -226,6 +229,7 @@ public abstract class OmemoServiceXEP-0384: Sending a key. * * @param managerGuard Initialized OmemoManager. @@ -572,9 +579,11 @@ public abstract class OmemoService getUndecidedDevices(OmemoDevice userDevice, OmemoTrustCallback callback, Set devices) throws IOException { @@ -871,6 +885,7 @@ public abstract class OmemoService Elliptic Curve PublicKey class * @param Bundle class * @param Cipher class + * * @author Paul Schaub */ public abstract class OmemoStore { @@ -68,6 +69,7 @@ public abstract class OmemoStore preKeyHashMap) throws IOException { @@ -449,6 +469,7 @@ public abstract class OmemoStore loadOmemoPreKeys(OmemoDevice userDevice) throws IOException; @@ -473,6 +494,7 @@ public abstract class OmemoStore loadOmemoSignedPreKeys(OmemoDevice userDevice) throws IOException; @@ -497,6 +519,7 @@ public abstract class OmemoStore loadAllRawSessionsOf(OmemoDevice userDevice, BareJid contact) throws IOException; @@ -535,6 +560,7 @@ public abstract class OmemoStore bundles(OmemoBundleElement bundle, OmemoDevice contact) throws CorruptedOmemoKeyException { @@ -138,6 +140,7 @@ public abstract class OmemoKeyUtilOMEMO security audit. * * @param message plaintext message + * * @throws NoSuchPaddingException if the requested padding mechanism is not availble. * @throws InvalidAlgorithmParameterException if the provided arguments are invalid. * @throws InvalidKeyException if the key is invalid. @@ -210,6 +212,7 @@ public class OmemoMessageBuilder Date: Mon, 6 Jan 2020 20:01:04 +0100 Subject: [PATCH 5/5] Improve readability by fixing wrong indentation levels --- .../smackx/omemo/OmemoManager.java | 20 +++++++++---------- .../smackx/omemo/OmemoService.java | 12 +++++------ .../omemo/element/OmemoBundleElement.java | 4 ++-- .../omemo/util/OmemoMessageBuilder.java | 6 +++--- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoManager.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoManager.java index 6b53c68b5..c319df84d 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoManager.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoManager.java @@ -316,9 +316,9 @@ public final class OmemoManager extends Manager { throws CryptoFailedException, UndecidedOmemoIdentityException, InterruptedException, SmackException.NotConnectedException, SmackException.NoResponseException, SmackException.NotLoggedInException, IOException { - Set recipients = new HashSet<>(); - recipients.add(recipient); - return encrypt(recipients, message); + Set recipients = new HashSet<>(); + recipients.add(recipient); + return encrypt(recipients, message); } /** @@ -506,8 +506,8 @@ public final class OmemoManager extends Manager { CryptoFailedException, CannotEstablishOmemoSessionException, IOException { XMPPConnection connection = connection(); MessageBuilder message = connection.getStanzaFactory() - .buildMessageStanza() - .to(recipient.getJid()); + .buildMessageStanza() + .to(recipient.getJid()); OmemoElement element = getOmemoService().createRatchetUpdateElement(new LoggedInOmemoManager(this), recipient); message.addExtension(element); @@ -751,8 +751,8 @@ public final class OmemoManager extends Manager { */ public synchronized void rotateSignedPreKey() throws CorruptedOmemoKeyException, SmackException.NotLoggedInException, XMPPException.XMPPErrorException, - SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException, - IOException, PubSubException.NotALeafNodeException { + SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException, + IOException, PubSubException.NotALeafNodeException { if (!connection().isAuthenticated()) { throw new SmackException.NotLoggedInException(); } @@ -1037,7 +1037,7 @@ public final class OmemoManager extends Manager { OmemoDeviceListElement receivedDeviceList = (OmemoDeviceListElement) payloadItem.getPayload(); try { getOmemoService().getOmemoStoreBackend().mergeCachedDeviceList(getOwnDevice(), from, - receivedDeviceList); + receivedDeviceList); if (!from.asBareJid().equals(getOwnJid())) { continue; @@ -1046,8 +1046,8 @@ public final class OmemoManager extends Manager { deviceList = getOmemoService().cleanUpDeviceList(getOwnDevice()); } catch (IOException e) { LOGGER.log(Level.SEVERE, - "IOException while processing OMEMO PEP device updates. Message: " + message, - e); + "IOException while processing OMEMO PEP device updates. Message: " + message, + e); continue; } final OmemoDeviceListElement_VAxolotl newDeviceList = new OmemoDeviceListElement_VAxolotl(deviceList); diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoService.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoService.java index 59d56a23f..c4c4066f7 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoService.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoService.java @@ -1141,8 +1141,8 @@ public abstract class OmemoService e : preKeysB64.entrySet()) { - sb.append(PRE_KEY_PUB).append(' ').append(PRE_KEY_ID).append("=").append(e.getKey()).append(": ").append(e.getValue()).append("\n"); + sb.append(PRE_KEY_PUB).append(' ').append(PRE_KEY_ID).append('=').append(e.getKey()).append(": ").append(e.getValue()).append('\n'); } - sb.append("]"); + sb.append(']'); return sb.toString(); } diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoMessageBuilder.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoMessageBuilder.java index 8e9f03a85..6e49db945 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoMessageBuilder.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoMessageBuilder.java @@ -152,8 +152,8 @@ public class OmemoMessageBuilder