package eu.siacs.conversations.crypto.axolotl; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import org.whispersystems.libaxolotl.AxolotlAddress; import org.whispersystems.libaxolotl.IdentityKey; import org.whispersystems.libaxolotl.state.PreKeyRecord; import org.whispersystems.libaxolotl.state.SignedPreKeyRecord; import java.security.cert.X509Certificate; import java.util.List; import java.util.Set; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.xmpp.OnAdvancedStreamFeaturesLoaded; import eu.siacs.conversations.xmpp.jid.Jid; /** * Created by tzur on 02.03.2016. */ public interface AxolotlService extends OnAdvancedStreamFeaturesLoaded { String LOGPREFIX = "AxolotlService"; String PEP_PREFIX = "eu.siacs.conversations.axolotl"; String PEP_DEVICE_LIST = PEP_PREFIX + ".devicelist"; String PEP_BUNDLES = PEP_PREFIX + ".bundles"; String PEP_VERIFICATION = PEP_PREFIX + ".verification"; int NUM_KEYS_TO_PUBLISH = 100; enum FetchStatus { PENDING, SUCCESS, SUCCESS_VERIFIED, TIMEOUT, ERROR } String getOwnFingerprint(); Set getKeysWithTrust(XmppAxolotlSession.Trust trust); Set getFingerprintsForOwnSessions(); Set getFingerprintsForContact(Contact contact); boolean isPepBroken(); void regenerateKeys(boolean wipeOther); int getOwnDeviceId(); Set getOwnDeviceIds(); void registerDevices(Jid jid, @NonNull Set deviceIds); void wipeOtherPepDevices(); void purgeKey(String fingerprint); void publishOwnDeviceIdIfNeeded(); void publishOwnDeviceId(Set deviceIds); void publishDeviceVerificationAndBundle(SignedPreKeyRecord signedPreKeyRecord, Set preKeyRecords, boolean announceAfter, boolean wipe); void publishBundlesIfNeeded(boolean announce, boolean wipe); XmppAxolotlSession.Trust getFingerprintTrust(String fingerprint); X509Certificate getFingerprintCertificate(String fingerprint); void setFingerprintTrust(String fingerprint, XmppAxolotlSession.Trust trust); Set findDevicesWithoutSession(Conversation conversation); boolean createSessionsIfNeeded(Conversation conversation); boolean trustedSessionVerified(Conversation conversation); @Nullable XmppAxolotlMessage encrypt(Message message); void preparePayloadMessage(Message message, boolean delay); XmppAxolotlMessage fetchAxolotlMessageFromCache(Message message); XmppAxolotlMessage.XmppAxolotlPlaintextMessage processReceivingPayloadMessage(XmppAxolotlMessage message); XmppAxolotlMessage.XmppAxolotlKeyTransportMessage processReceivingKeyTransportMessage(XmppAxolotlMessage message); boolean fetchMapHasErrors(List jids); Set getKeysWithTrust(XmppAxolotlSession.Trust trust, Jid jid); Set getKeysWithTrust(XmppAxolotlSession.Trust trust, List jids); long getNumTrustedKeys(Jid jid); boolean anyTargetHasNoTrustedKeys(List jids); boolean isConversationAxolotlCapable(Conversation conversation); List getCryptoTargets(Conversation conversation); boolean hasPendingKeyFetches(Account account, List jids); void prepareKeyTransportMessage(Conversation conversation, OnMessageCreatedCallback onMessageCreatedCallback); }