diff options
Diffstat (limited to 'src/eu/siacs/conversations/crypto')
-rw-r--r-- | src/eu/siacs/conversations/crypto/OtrEngine.java | 61 | ||||
-rw-r--r-- | src/eu/siacs/conversations/crypto/PgpEngine.java | 21 |
2 files changed, 44 insertions, 38 deletions
diff --git a/src/eu/siacs/conversations/crypto/OtrEngine.java b/src/eu/siacs/conversations/crypto/OtrEngine.java index 7960aa2b..0ef112c6 100644 --- a/src/eu/siacs/conversations/crypto/OtrEngine.java +++ b/src/eu/siacs/conversations/crypto/OtrEngine.java @@ -17,6 +17,7 @@ import org.json.JSONObject; import android.content.Context; import android.util.Log; +import eu.siacs.conversations.Config; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.persistance.DatabaseBackend; import eu.siacs.conversations.xmpp.stanzas.MessagePacket; @@ -29,9 +30,7 @@ import net.java.otr4j.session.InstanceTag; import net.java.otr4j.session.SessionID; public class OtrEngine implements OtrEngineHost { - - private static final String LOGTAG = "xmppService"; - + private Account account; private OtrPolicy otrPolicy; private KeyPair keyPair; @@ -45,17 +44,17 @@ public class OtrEngine implements OtrEngineHost { this.otrPolicy.setAllowV3(true); this.keyPair = loadKey(account.getKeys()); } - + private KeyPair loadKey(JSONObject keys) { if (keys == null) { return null; } try { - BigInteger x = new BigInteger(keys.getString("otr_x"),16); - BigInteger y = new BigInteger(keys.getString("otr_y"),16); - BigInteger p = new BigInteger(keys.getString("otr_p"),16); - BigInteger q = new BigInteger(keys.getString("otr_q"),16); - BigInteger g = new BigInteger(keys.getString("otr_g"),16); + BigInteger x = new BigInteger(keys.getString("otr_x"), 16); + BigInteger y = new BigInteger(keys.getString("otr_y"), 16); + BigInteger p = new BigInteger(keys.getString("otr_p"), 16); + BigInteger q = new BigInteger(keys.getString("otr_q"), 16); + BigInteger g = new BigInteger(keys.getString("otr_g"), 16); KeyFactory keyFactory = KeyFactory.getInstance("DSA"); DSAPublicKeySpec pubKeySpec = new DSAPublicKeySpec(y, p, q, g); DSAPrivateKeySpec privateKeySpec = new DSAPrivateKeySpec(x, p, q, g); @@ -70,26 +69,28 @@ public class OtrEngine implements OtrEngineHost { return null; } } - + private void saveKey() { PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); KeyFactory keyFactory; try { keyFactory = KeyFactory.getInstance("DSA"); - DSAPrivateKeySpec privateKeySpec = keyFactory.getKeySpec(privateKey, DSAPrivateKeySpec.class); - DSAPublicKeySpec publicKeySpec = keyFactory.getKeySpec(publicKey, DSAPublicKeySpec.class); - this.account.setKey("otr_x",privateKeySpec.getX().toString(16)); - this.account.setKey("otr_g",privateKeySpec.getG().toString(16)); - this.account.setKey("otr_p",privateKeySpec.getP().toString(16)); - this.account.setKey("otr_q",privateKeySpec.getQ().toString(16)); - this.account.setKey("otr_y",publicKeySpec.getY().toString(16)); + DSAPrivateKeySpec privateKeySpec = keyFactory.getKeySpec( + privateKey, DSAPrivateKeySpec.class); + DSAPublicKeySpec publicKeySpec = keyFactory.getKeySpec(publicKey, + DSAPublicKeySpec.class); + this.account.setKey("otr_x", privateKeySpec.getX().toString(16)); + this.account.setKey("otr_g", privateKeySpec.getG().toString(16)); + this.account.setKey("otr_p", privateKeySpec.getP().toString(16)); + this.account.setKey("otr_q", privateKeySpec.getQ().toString(16)); + this.account.setKey("otr_y", publicKeySpec.getY().toString(16)); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeySpecException e) { e.printStackTrace(); } - + } @Override @@ -123,18 +124,19 @@ public class OtrEngine implements OtrEngineHost { } return this.keyPair.getPublic(); } - + @Override public KeyPair getLocalKeyPair(SessionID arg0) throws OtrException { - if (this.keyPair==null) { + if (this.keyPair == null) { KeyPairGenerator kg; try { - kg = KeyPairGenerator.getInstance("DSA"); - this.keyPair = kg.genKeyPair(); - this.saveKey(); - DatabaseBackend.getInstance(context).updateAccount(account); + kg = KeyPairGenerator.getInstance("DSA"); + this.keyPair = kg.genKeyPair(); + this.saveKey(); + DatabaseBackend.getInstance(context).updateAccount(account); } catch (NoSuchAlgorithmException e) { - Log.d(LOGTAG,"error generating key pair "+e.getMessage()); + Log.d(Config.LOGTAG, + "error generating key pair " + e.getMessage()); } } return this.keyPair; @@ -152,17 +154,18 @@ public class OtrEngine implements OtrEngineHost { } @Override - public void injectMessage(SessionID session, String body) throws OtrException { + public void injectMessage(SessionID session, String body) + throws OtrException { MessagePacket packet = new MessagePacket(); packet.setFrom(account.getFullJid()); if (session.getUserID().isEmpty()) { packet.setTo(session.getAccountID()); } else { - packet.setTo(session.getAccountID()+"/"+session.getUserID()); + packet.setTo(session.getAccountID() + "/" + session.getUserID()); } packet.setBody(body); - packet.addChild("private","urn:xmpp:carbons:2"); - packet.addChild("no-copy","urn:xmpp:hints"); + packet.addChild("private", "urn:xmpp:carbons:2"); + packet.addChild("no-copy", "urn:xmpp:hints"); packet.setType(MessagePacket.TYPE_CHAT); account.getXmppConnection().sendMessagePacket(packet); } diff --git a/src/eu/siacs/conversations/crypto/PgpEngine.java b/src/eu/siacs/conversations/crypto/PgpEngine.java index 65b7ccc7..47b1a0cb 100644 --- a/src/eu/siacs/conversations/crypto/PgpEngine.java +++ b/src/eu/siacs/conversations/crypto/PgpEngine.java @@ -14,6 +14,7 @@ import org.openintents.openpgp.OpenPgpSignatureResult; import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi.IOpenPgpCallback; +import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Contact; @@ -38,7 +39,7 @@ public class PgpEngine { public void decrypt(final Message message, final UiCallback<Message> callback) { - Log.d("xmppService", "decrypting message " + message.getUuid()); + Log.d(Config.LOGTAG, "decrypting message " + message.getUuid()); Intent params = new Intent(); params.setAction(OpenPgpApi.ACTION_DECRYPT_VERIFY); params.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, message @@ -65,7 +66,7 @@ public class PgpEngine { callback.error(R.string.openpgp_error, message); return; } - + return; case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED: callback.userInputRequried((PendingIntent) result @@ -73,8 +74,9 @@ public class PgpEngine { message); return; case OpenPgpApi.RESULT_CODE_ERROR: - OpenPgpError error = result.getParcelableExtra(OpenPgpApi.RESULT_ERROR); - Log.d("xmppService",error.getMessage()); + OpenPgpError error = result + .getParcelableExtra(OpenPgpApi.RESULT_ERROR); + Log.d(Config.LOGTAG, error.getMessage()); callback.error(R.string.openpgp_error, message); return; default: @@ -109,7 +111,8 @@ public class PgpEngine { message.setEncryption(Message.ENCRYPTION_DECRYPTED); PgpEngine.this.mXmppConnectionService .updateMessage(message); - PgpEngine.this.mXmppConnectionService.updateConversationUi(); + PgpEngine.this.mXmppConnectionService + .updateConversationUi(); callback.success(message); return; case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED: @@ -177,7 +180,7 @@ public class PgpEngine { } catch (IOException e) { callback.error(R.string.openpgp_error, message); } - + break; case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED: callback.userInputRequried((PendingIntent) result @@ -221,9 +224,9 @@ public class PgpEngine { } }); } catch (FileNotFoundException e) { - Log.d("xmppService", "file not found: " + e.getMessage()); + Log.d(Config.LOGTAG, "file not found: " + e.getMessage()); } catch (IOException e) { - Log.d("xmppService", "io exception during file encrypt"); + Log.d(Config.LOGTAG, "io exception during file encrypt"); } } } @@ -267,7 +270,7 @@ public class PgpEngine { case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED: return 0; case OpenPgpApi.RESULT_CODE_ERROR: - Log.d("xmppService", + Log.d(Config.LOGTAG, "openpgp error: " + ((OpenPgpError) result .getParcelableExtra(OpenPgpApi.RESULT_ERROR)) |