package org.mercury_im.messenger.core.viewmodel.ikey; import org.bouncycastle.openpgp.PGPException; import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smackx.ikey.IkeyManager; import org.jivesoftware.smackx.ox.element.SecretkeyElement; import org.jivesoftware.smackx.pubsub.PubSubException; import org.mercury_im.messenger.core.connection.MercuryConnection; import org.mercury_im.messenger.core.connection.MercuryConnectionManager; import org.mercury_im.messenger.core.crypto.ikey.IkeyInitializer; import org.mercury_im.messenger.core.viewmodel.MercuryViewModel; import org.mercury_im.messenger.entity.Account; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; public class IkeyInitializationViewModel implements MercuryViewModel { private final MercuryConnectionManager connectionManager; private final IkeyInitializer ikeyInitializer; public IkeyInitializationViewModel(MercuryConnectionManager connectionManager, IkeyInitializer ikeyInitializer) { this.connectionManager = connectionManager; this.ikeyInitializer = ikeyInitializer; } public void initialize(Account account) throws PGPException, NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException, InterruptedException, SmackException.NoResponseException, SmackException.NotConnectedException, SmackException.FeatureNotSupportedException, XMPPException.XMPPErrorException, PubSubException.NotALeafNodeException, IOException { MercuryConnection connection = connectionManager.getConnection(account); IkeyManager ikeyManager = ikeyInitializer.initFor(connection); final SecretkeyElement backup = ikeyManager.fetchSecretIdentityKey(); if (!ikeyManager.hasLocalKey()) { if (backup == null) { ikeyManager.generateIdentityKey(); ikeyManager.depositIdentityKeyBackup(); } else { //ikeyManager.restore(backup); } } else { if (backup == null) { ikeyManager.depositIdentityKeyBackup(); } else { //if (!ikeyManager.keyBackupIsSameAsLocal()) { // displayNewKeyNotification(); //} else { // ikeyManager.depositIdentityKeyBackup(); // } } } } }