diff -r fbd3585af53e -r 0ff0059f2ec3 src/net/java/otr4j/io/messages/DataMessage.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/net/java/otr4j/io/messages/DataMessage.java Sun Dec 05 18:43:51 2010 +0100 @@ -0,0 +1,103 @@ +/* + * otr4j, the open source java otr library. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.otr4j.io.messages; + +import java.util.Arrays; + +import javax.crypto.interfaces.DHPublicKey; + +/** + * + * @author George Politis + */ +public class DataMessage extends AbstractEncodedMessage { + + // Fields. + public byte[] mac; + public byte[] oldMACKeys; + + public int flags; + public int senderKeyID; + public int recipientKeyID; + public DHPublicKey nextDH; + public byte[] ctr; + public byte[] encryptedMessage; + + // Ctor. + public DataMessage(int protocolVersion, int flags, int senderKeyID, + int recipientKeyID, DHPublicKey nextDH, byte[] ctr, + byte[] encryptedMessage, byte[] mac, byte[] oldMacKeys) { + super(MESSAGE_DATA, protocolVersion); + + this.flags = flags; + this.senderKeyID = senderKeyID; + this.recipientKeyID = recipientKeyID; + this.nextDH = nextDH; + this.ctr = ctr; + this.encryptedMessage = encryptedMessage; + this.mac = mac; + this.oldMACKeys = oldMacKeys; + } + + public DataMessage(MysteriousT t, byte[] mac, byte[] oldMacKeys) { + this(t.protocolVersion, t.flags, t.senderKeyID, t.recipientKeyID, + t.nextDH, t.ctr, t.encryptedMessage, mac, oldMacKeys); + } + + // Methods. + public MysteriousT getT() { + return new MysteriousT(protocolVersion, flags, senderKeyID, + recipientKeyID, nextDH, ctr, encryptedMessage); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + Arrays.hashCode(ctr); + result = prime * result + Arrays.hashCode(encryptedMessage); + result = prime * result + flags; + result = prime * result + Arrays.hashCode(mac); + // TODO: Needs work. + result = prime * result + ((nextDH == null) ? 0 : nextDH.hashCode()); + result = prime * result + Arrays.hashCode(oldMACKeys); + result = prime * result + recipientKeyID; + result = prime * result + senderKeyID; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + DataMessage other = (DataMessage) obj; + if (!Arrays.equals(ctr, other.ctr)) + return false; + if (!Arrays.equals(encryptedMessage, other.encryptedMessage)) + return false; + if (flags != other.flags) + return false; + if (!Arrays.equals(mac, other.mac)) + return false; + if (nextDH == null) { + if (other.nextDH != null) + return false; + } else if (!nextDH.equals(other.nextDH)) + return false; + if (!Arrays.equals(oldMACKeys, other.oldMACKeys)) + return false; + if (recipientKeyID != other.recipientKeyID) + return false; + if (senderKeyID != other.senderKeyID) + return false; + return true; + } +}