package info.guardianproject.otr;
import info.guardianproject.otr.app.im.plugin.xmpp.XmppConnection;
import java.io.IOException;
import java.security.KeyPair;
import java.security.PublicKey;
import net.java.otr4j.OtrEngineHost;
import net.java.otr4j.OtrPolicy;
import net.java.otr4j.session.SessionID;
import android.util.Log;
public class OtrEngineHostImpl implements OtrEngineHost{
private XmppConnection xConn;
private OtrPolicy policy;
public String lastInjectedMessage;
private OtrAndroidKeyManagerImpl otrKeyManager;
private final static String OTR_KEYSTORE_PATH ="otr_keystore";
private final static String TAG = OtrEngineHostImpl.class.getClass().getName();
public OtrEngineHostImpl(XmppConnection xConn, OtrPolicy policy) throws IOException
{
this.xConn = xConn;
this.policy = policy;
otrKeyManager = new OtrAndroidKeyManagerImpl(OTR_KEYSTORE_PATH);
}
public void storeRemoteKey (SessionID sessionID, PublicKey remoteKey)
{
otrKeyManager.savePublicKey(sessionID, remoteKey);
}
public boolean isRemoteKeyVerified (SessionID sessionID)
{
return otrKeyManager.isVerified(sessionID);
}
public String getLocalKeyFingerprint (SessionID sessionID)
{
return otrKeyManager.getLocalFingerprint(sessionID);
}
public String getRemoteKeyFingerprint (SessionID sessionID)
{
return otrKeyManager.getRemoteFingerprint(sessionID);
}
@Override
public KeyPair getKeyPair(SessionID sessionID) {
KeyPair kp = null;
kp = otrKeyManager.loadLocalKeyPair(sessionID);
if (kp != null)
return kp;
else
{
otrKeyManager.generateLocalKeyPair(sessionID);
kp = otrKeyManager.loadLocalKeyPair(sessionID);
return kp;
}
}
@Override
public OtrPolicy getSessionPolicy(SessionID sessionID) {
return this.policy;
}
@Override
public void injectMessage(SessionID sessionID, String msg) {
org.jivesoftware.smack.packet.Message xMsg =
new org.jivesoftware.smack.packet.Message(
sessionID.getUserID(),
org.jivesoftware.smack.packet.Message.Type.chat
);
xMsg.setBody(msg);
xConn.sendMessage(xMsg);
}
@Override
public void showError(SessionID sessionID, String error) {
Log.e(TAG, sessionID.getUserID() + ": " + error);
}
@Override
public void showWarning(SessionID sessionID, String warning) {
Log.w(TAG, sessionID.getUserID() + ": " + warning);
}
}