src/net/java/otr4j/session/SessionKeysImpl.java
changeset 1044 197a85a35cba
parent 1043 7d6f2526244a
child 1045 e5a970600066
--- a/src/net/java/otr4j/session/SessionKeysImpl.java	Sun Mar 15 17:28:04 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,240 +0,0 @@
-/*
- * otr4j, the open source java otr library.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.otr4j.session;
-
-import java.math.BigInteger;
-import java.nio.ByteBuffer;
-import java.security.KeyPair;
-import java.util.Arrays;
-import java.util.logging.Logger;
-
-import javax.crypto.interfaces.DHPublicKey;
-
-import net.java.otr4j.OtrException;
-import net.java.otr4j.crypto.OtrCryptoEngine;
-import net.java.otr4j.crypto.OtrCryptoEngineImpl;
-import net.java.otr4j.io.SerializationUtils;
-
-/**
- * 
- * @author George Politis
- */
-class SessionKeysImpl implements SessionKeys {
-
-	private static Logger logger = Logger.getLogger(SessionKeysImpl.class
-			.getName());
-	private String keyDescription;
-
-	public SessionKeysImpl(int localKeyIndex, int remoteKeyIndex) {
-		if (localKeyIndex == 0)
-			keyDescription = "(Previous local, ";
-		else
-			keyDescription = "(Most recent local, ";
-
-		if (remoteKeyIndex == 0)
-			keyDescription += "Previous remote)";
-		else
-			keyDescription += "Most recent remote)";
-
-	}
-
-	public void setLocalPair(KeyPair keyPair, int localPairKeyID) {
-		this.localPair = keyPair;
-		this.setLocalKeyID(localPairKeyID);
-		logger.finest(keyDescription + " current local key ID: "
-				+ this.getLocalKeyID());
-		this.reset();
-	}
-
-	public void setRemoteDHPublicKey(DHPublicKey pubKey, int remoteKeyID) {
-		this.setRemoteKey(pubKey);
-		this.setRemoteKeyID(remoteKeyID);
-		logger.finest(keyDescription + " current remote key ID: "
-				+ this.getRemoteKeyID());
-		this.reset();
-	}
-
-	private byte[] sendingCtr = new byte[16];
-	private byte[] receivingCtr = new byte[16];
-
-	public void incrementSendingCtr() {
-		logger.finest("Incrementing counter for (localkeyID, remoteKeyID) = ("
-				+ getLocalKeyID() + "," + getRemoteKeyID() + ")");
-		// logger.debug("Counter prior increament: " +
-		// Utils.dump(sendingCtr,
-		// true, 16));
-		for (int i = 7; i >= 0; i--)
-			if (++sendingCtr[i] != 0)
-				break;
-		// logger.debug("Counter after increament: " +
-		// Utils.dump(sendingCtr,
-		// true, 16));
-	}
-
-	public byte[] getSendingCtr() {
-		return sendingCtr;
-	}
-
-	public byte[] getReceivingCtr() {
-		return receivingCtr;
-	}
-
-	public void setReceivingCtr(byte[] ctr) {
-		for (int i = 0; i < ctr.length; i++)
-			receivingCtr[i] = ctr[i];
-	}
-
-	private void reset() {
-		logger.finest("Resetting " + keyDescription + " session keys.");
-		Arrays.fill(this.sendingCtr, (byte) 0x00);
-		Arrays.fill(this.receivingCtr, (byte) 0x00);
-		this.sendingAESKey = null;
-		this.receivingAESKey = null;
-		this.sendingMACKey = null;
-		this.receivingMACKey = null;
-		this.setIsUsedReceivingMACKey(false);
-		this.s = null;
-		if (getLocalPair() != null && getRemoteKey() != null) {
-			this.isHigh = ((DHPublicKey) getLocalPair().getPublic()).getY()
-					.abs().compareTo(getRemoteKey().getY().abs()) == 1;
-		}
-
-	}
-
-	private byte[] h1(byte b) throws OtrException {
-
-		try {
-			byte[] secbytes = SerializationUtils.writeMpi(getS());
-
-			int len = secbytes.length + 1;
-			ByteBuffer buff = ByteBuffer.allocate(len);
-			buff.put(b);
-			buff.put(secbytes);
-			byte[] result = new OtrCryptoEngineImpl().sha1Hash(buff.array());
-			return result;
-		} catch (Exception e) {
-			throw new OtrException(e);
-		}
-	}
-
-	public byte[] getSendingAESKey() throws OtrException {
-		if (sendingAESKey != null)
-			return sendingAESKey;
-
-		byte sendbyte = LOW_SEND_BYTE;
-		if (this.isHigh)
-			sendbyte = HIGH_SEND_BYTE;
-
-		byte[] h1 = h1(sendbyte);
-
-		byte[] key = new byte[OtrCryptoEngine.AES_KEY_BYTE_LENGTH];
-		ByteBuffer buff = ByteBuffer.wrap(h1);
-		buff.get(key);
-		logger.finest("Calculated sending AES key.");
-		this.sendingAESKey = key;
-		return sendingAESKey;
-	}
-
-	public byte[] getReceivingAESKey() throws OtrException {
-		if (receivingAESKey != null)
-			return receivingAESKey;
-
-		byte receivebyte = LOW_RECEIVE_BYTE;
-		if (this.isHigh)
-			receivebyte = HIGH_RECEIVE_BYTE;
-
-		byte[] h1 = h1(receivebyte);
-
-		byte[] key = new byte[OtrCryptoEngine.AES_KEY_BYTE_LENGTH];
-		ByteBuffer buff = ByteBuffer.wrap(h1);
-		buff.get(key);
-		logger.finest("Calculated receiving AES key.");
-		this.receivingAESKey = key;
-
-		return receivingAESKey;
-	}
-
-	public byte[] getSendingMACKey() throws OtrException {
-		if (sendingMACKey != null)
-			return sendingMACKey;
-
-		sendingMACKey = new OtrCryptoEngineImpl().sha1Hash(getSendingAESKey());
-		logger.finest("Calculated sending MAC key.");
-		return sendingMACKey;
-	}
-
-	public byte[] getReceivingMACKey() throws OtrException {
-		if (receivingMACKey == null) {
-			receivingMACKey = new OtrCryptoEngineImpl()
-					.sha1Hash(getReceivingAESKey());
-			logger.finest("Calculated receiving AES key.");
-		}
-		return receivingMACKey;
-	}
-
-	private BigInteger getS() throws OtrException {
-		if (s == null) {
-			s = new OtrCryptoEngineImpl().generateSecret(getLocalPair()
-					.getPrivate(), getRemoteKey());
-			logger.finest("Calculating shared secret S.");
-		}
-		return s;
-	}
-
-	public void setS(BigInteger s) {
-		this.s = s;
-	}
-
-	public void setIsUsedReceivingMACKey(Boolean isUsedReceivingMACKey) {
-		this.isUsedReceivingMACKey = isUsedReceivingMACKey;
-	}
-
-	public Boolean getIsUsedReceivingMACKey() {
-		return isUsedReceivingMACKey;
-	}
-
-	private void setLocalKeyID(int localKeyID) {
-		this.localKeyID = localKeyID;
-	}
-
-	public int getLocalKeyID() {
-		return localKeyID;
-	}
-
-	private void setRemoteKeyID(int remoteKeyID) {
-		this.remoteKeyID = remoteKeyID;
-	}
-
-	public int getRemoteKeyID() {
-		return remoteKeyID;
-	}
-
-	private void setRemoteKey(DHPublicKey remoteKey) {
-		this.remoteKey = remoteKey;
-	}
-
-	public DHPublicKey getRemoteKey() {
-		return remoteKey;
-	}
-
-	public KeyPair getLocalPair() {
-		return localPair;
-	}
-
-	private int localKeyID;
-	private int remoteKeyID;
-	private DHPublicKey remoteKey;
-	private KeyPair localPair;
-
-	private byte[] sendingAESKey;
-	private byte[] receivingAESKey;
-	private byte[] sendingMACKey;
-	private byte[] receivingMACKey;
-	private Boolean isUsedReceivingMACKey;
-	private BigInteger s;
-	private Boolean isHigh;
-}