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.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"; enum FetchStatus { PENDING, SUCCESS, SUCCESS_VERIFIED, TIMEOUT, ERROR } boolean fetchMapHasErrors(Contact contact); String getOwnFingerprint(); Set getKeysWithTrust(XmppAxolotlSession.Trust trust); Set getKeysWithTrust(XmppAxolotlSession.Trust trust, Contact contact); long getNumTrustedKeys(Contact contact); 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); boolean isContactAxolotlCapable(Contact contact); XmppAxolotlSession.Trust getFingerprintTrust(String fingerprint); X509Certificate getFingerprintCertificate(String fingerprint); void setFingerprintTrust(String fingerprint, XmppAxolotlSession.Trust trust); Set findDevicesWithoutSession(Conversation conversation); Set findDevicesWithoutSession(Jid contactJid); boolean createSessionsIfNeeded(Conversation conversation); boolean trustedSessionVerified(Conversation conversation); boolean hasPendingKeyFetches(Account account, Contact contact); @Nullable XmppAxolotlMessage encrypt(Message message); void preparePayloadMessage(Message message, boolean delay); void prepareKeyTransportMessage(Contact contact, OnMessageCreatedCallback onMessageCreatedCallback); XmppAxolotlMessage fetchAxolotlMessageFromCache(Message message); XmppAxolotlMessage.XmppAxolotlPlaintextMessage processReceivingPayloadMessage(XmppAxolotlMessage message); XmppAxolotlMessage.XmppAxolotlKeyTransportMessage processReceivingKeyTransportMessage(XmppAxolotlMessage message); }