src/net/java/otr4j/OtrKeyManagerImpl.java
changeset 1040 197a85a35cba
parent 1039 7d6f2526244a
child 1041 e5a970600066
--- a/src/net/java/otr4j/OtrKeyManagerImpl.java	Sun Mar 15 17:28:04 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,304 +0,0 @@
-package net.java.otr4j;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.KeyFactory;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.security.spec.X509EncodedKeySpec;
-import java.util.List;
-import java.util.Properties;
-import java.util.Vector;
-
-import org.bouncycastle2.util.encoders.Base64;
-
-import net.java.otr4j.crypto.OtrCryptoEngineImpl;
-import net.java.otr4j.crypto.OtrCryptoException;
-import net.java.otr4j.session.SessionID;
-
-public class OtrKeyManagerImpl implements OtrKeyManager {
-
-	private OtrKeyManagerStore store;
-
-	public OtrKeyManagerImpl(OtrKeyManagerStore store) {
-		this.store = store;
-	}
-
-	class DefaultPropertiesStore implements OtrKeyManagerStore {
-		private final Properties properties = new Properties();
-		private String filepath;
-
-		public DefaultPropertiesStore(String filepath) throws IOException {
-			if (filepath == null || filepath.length() < 1)
-				throw new IllegalArgumentException();
-			this.filepath = filepath;
-			properties.clear();
-
-			InputStream in = new BufferedInputStream(new FileInputStream(
-					getConfigurationFile()));
-			try {
-				properties.load(in);
-			} finally {
-				in.close();
-			}
-		}
-
-		private File getConfigurationFile() throws IOException {
-			File configFile = new File(filepath);
-			if (!configFile.exists())
-				configFile.createNewFile();
-			return configFile;
-		}
-
-		public void setProperty(String id, boolean value) {
-			properties.setProperty(id, "true");
-			try {
-				this.store();
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-
-		private void store() throws FileNotFoundException, IOException {
-			OutputStream out = new FileOutputStream(getConfigurationFile());
-			properties.store(out, null);
-			out.close();
-		}
-
-		public void setProperty(String id, byte[] value) {
-			properties.setProperty(id, new String(Base64.encode(value)));
-			try {
-				this.store();
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-
-		public void removeProperty(String id) {
-			properties.remove(id);
-
-		}
-
-		public byte[] getPropertyBytes(String id) {
-			String value = properties.getProperty(id);
-			if (value == null)
-			    return null;
-			return Base64.decode(value);
-		}
-
-		public boolean getPropertyBoolean(String id, boolean defaultValue) {
-			try {
-				return Boolean.valueOf(properties.get(id).toString());
-			} catch (Exception e) {
-				return defaultValue;
-			}
-		}
-	}
-
-	public OtrKeyManagerImpl(String filepath) throws IOException {
-		this.store = new DefaultPropertiesStore(filepath);
-	}
-
-	private List<OtrKeyManagerListener> listeners = new Vector<OtrKeyManagerListener>();
-
-	public void addListener(OtrKeyManagerListener l) {
-		synchronized (listeners) {
-			if (!listeners.contains(l))
-				listeners.add(l);
-		}
-	}
-
-	public void removeListener(OtrKeyManagerListener l) {
-		synchronized (listeners) {
-			listeners.remove(l);
-		}
-	}
-
-	public void generateLocalKeyPair(SessionID sessionID) {
-		if (sessionID == null)
-			return;
-
-		String accountID = sessionID.getAccountID();
-		KeyPair keyPair;
-		try {
-			keyPair = KeyPairGenerator.getInstance("DSA").genKeyPair();
-		} catch (NoSuchAlgorithmException e) {
-			e.printStackTrace();
-			return;
-		}
-
-		// Store Public Key.
-		PublicKey pubKey = keyPair.getPublic();
-		X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(pubKey
-				.getEncoded());
-
-		this.store.setProperty(accountID + ".publicKey", x509EncodedKeySpec
-				.getEncoded());
-
-		// Store Private Key.
-		PrivateKey privKey = keyPair.getPrivate();
-		PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(
-				privKey.getEncoded());
-
-		this.store.setProperty(accountID + ".privateKey", pkcs8EncodedKeySpec
-				.getEncoded());
-	}
-
-	public String getLocalFingerprint(SessionID sessionID) {
-		KeyPair keyPair = loadLocalKeyPair(sessionID);
-
-		if (keyPair == null)
-			return null;
-
-		PublicKey pubKey = keyPair.getPublic();
-
-		try {
-			return new OtrCryptoEngineImpl().getFingerprint(pubKey);
-		} catch (OtrCryptoException e) {
-			e.printStackTrace();
-			return null;
-		}
-	}
-
-	public String getRemoteFingerprint(SessionID sessionID) {
-		PublicKey remotePublicKey = loadRemotePublicKey(sessionID);
-		if (remotePublicKey == null)
-			return null;
-		try {
-			return new OtrCryptoEngineImpl().getFingerprint(remotePublicKey);
-		} catch (OtrCryptoException e) {
-			e.printStackTrace();
-			return null;
-		}
-	}
-
-	public boolean isVerified(SessionID sessionID) {
-		if (sessionID == null)
-			return false;
-
-		return this.store.getPropertyBoolean(sessionID.getUserID()
-				+ ".publicKey.verified", false);
-	}
-
-	public KeyPair loadLocalKeyPair(SessionID sessionID) {
-		if (sessionID == null)
-			return null;
-
-		String accountID = sessionID.getAccountID();
-		// Load Private Key.
-		byte[] b64PrivKey = this.store.getPropertyBytes(accountID
-				+ ".privateKey");
-		if (b64PrivKey == null)
-			return null;
-
-		PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(b64PrivKey);
-
-		// Load Public Key.
-		byte[] b64PubKey = this.store
-				.getPropertyBytes(accountID + ".publicKey");
-		if (b64PubKey == null)
-			return null;
-
-		X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(b64PubKey);
-
-		PublicKey publicKey;
-		PrivateKey privateKey;
-
-		// Generate KeyPair.
-		KeyFactory keyFactory;
-		try {
-			keyFactory = KeyFactory.getInstance("DSA");
-			publicKey = keyFactory.generatePublic(publicKeySpec);
-			privateKey = keyFactory.generatePrivate(privateKeySpec);
-		} catch (NoSuchAlgorithmException e) {
-			e.printStackTrace();
-			return null;
-		} catch (InvalidKeySpecException e) {
-			e.printStackTrace();
-			return null;
-		}
-
-		return new KeyPair(publicKey, privateKey);
-	}
-
-	public PublicKey loadRemotePublicKey(SessionID sessionID) {
-		if (sessionID == null)
-			return null;
-
-		String userID = sessionID.getUserID();
-
-		byte[] b64PubKey = this.store.getPropertyBytes(userID + ".publicKey");
-		if (b64PubKey == null)
-			return null;
-
-		X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(b64PubKey);
-
-		// Generate KeyPair.
-		KeyFactory keyFactory;
-		try {
-			keyFactory = KeyFactory.getInstance("DSA");
-			return keyFactory.generatePublic(publicKeySpec);
-		} catch (NoSuchAlgorithmException e) {
-			e.printStackTrace();
-			return null;
-		} catch (InvalidKeySpecException e) {
-			e.printStackTrace();
-			return null;
-		}
-	}
-
-	public void savePublicKey(SessionID sessionID, PublicKey pubKey) {
-		if (sessionID == null)
-			return;
-
-		X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(pubKey
-				.getEncoded());
-
-		String userID = sessionID.getUserID();
-		this.store.setProperty(userID + ".publicKey", x509EncodedKeySpec
-				.getEncoded());
-
-		this.store.removeProperty(userID + ".publicKey.verified");
-	}
-
-	public void unverify(SessionID sessionID) {
-		if (sessionID == null)
-			return;
-
-		if (!isVerified(sessionID))
-			return;
-
-		this.store
-				.removeProperty(sessionID.getUserID() + ".publicKey.verified");
-
-		for (OtrKeyManagerListener l : listeners)
-			l.verificationStatusChanged(sessionID);
-
-	}
-
-	public void verify(SessionID sessionID) {
-		if (sessionID == null)
-			return;
-
-		if (this.isVerified(sessionID))
-			return;
-
-		this.store.setProperty(sessionID.getUserID() + ".publicKey.verified",
-				true);
-
-		for (OtrKeyManagerListener l : listeners)
-			l.verificationStatusChanged(sessionID);
-	}
-
-}