package network.thunder.core.communication.objects.messages.impl.message.gossip.objects;
import network.thunder.core.etc.Tools;
import java.nio.ByteBuffer;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
/**
* Created by matsjerratsch on 19/10/2015.
*/
public class PubkeyChannelObject extends P2PDataObject {
public byte[] secretAHash;
public byte[] secretBHash;
public byte[] pubkeyB;
public byte[] pubkeyB1;
public byte[] pubkeyB2;
public byte[] pubkeyA;
public byte[] pubkeyA1;
public byte[] pubkeyA2;
public byte[] txidAnchor;
public byte[] signatureA;
public byte[] signatureB;
public PubkeyChannelObject () {
}
public PubkeyChannelObject (ResultSet set) throws SQLException {
this.secretAHash = set.getBytes("secret_a_hash");
this.secretBHash = set.getBytes("secret_b_hash");
this.pubkeyB1 = set.getBytes("pubkey_b1");
this.pubkeyB2 = set.getBytes("pubkey_b2");
this.pubkeyA1 = set.getBytes("pubkey_a1");
this.pubkeyA2 = set.getBytes("pubkey_a2");
this.txidAnchor = set.getBytes("txid_anchor");
this.signatureA = set.getBytes("signature_a");
this.signatureB = set.getBytes("signature_b");
this.pubkeyA = set.getBytes("nodes_a_table.pubkey");
this.pubkeyB = set.getBytes("nodes_b_table.pubkey");
}
public static PubkeyChannelObject getRandomObject () {
PubkeyChannelObject obj = new PubkeyChannelObject();
obj.secretAHash = Tools.getRandomByte(20);
obj.secretBHash = Tools.getRandomByte(20);
obj.pubkeyB = Tools.getRandomByte(33);
obj.pubkeyB1 = Tools.getRandomByte(33);
obj.pubkeyB2 = Tools.getRandomByte(33);
obj.pubkeyA = Tools.getRandomByte(33);
obj.pubkeyA1 = Tools.getRandomByte(33);
obj.pubkeyA2 = Tools.getRandomByte(33);
obj.txidAnchor = Tools.getRandomByte(32);
obj.signatureA = Tools.getRandomByte(65);
obj.signatureB = Tools.getRandomByte(65);
return obj;
}
@Override
public boolean equals (Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
PubkeyChannelObject that = (PubkeyChannelObject) o;
if (!Arrays.equals(secretAHash, that.secretAHash)) {
return false;
}
if (!Arrays.equals(secretBHash, that.secretBHash)) {
return false;
}
if (!Arrays.equals(pubkeyB, that.pubkeyB)) {
return false;
}
if (!Arrays.equals(pubkeyB1, that.pubkeyB1)) {
return false;
}
if (!Arrays.equals(pubkeyB2, that.pubkeyB2)) {
return false;
}
if (!Arrays.equals(pubkeyA, that.pubkeyA)) {
return false;
}
if (!Arrays.equals(pubkeyA1, that.pubkeyA1)) {
return false;
}
if (!Arrays.equals(pubkeyA2, that.pubkeyA2)) {
return false;
}
if (!Arrays.equals(txidAnchor, that.txidAnchor)) {
return false;
}
if (!Arrays.equals(signatureA, that.signatureA)) {
return false;
}
return Arrays.equals(signatureB, that.signatureB);
}
@Override
public byte[] getData () {
//TODO: Have some proper summary here..
ByteBuffer byteBuffer = ByteBuffer.allocate(secretAHash.length + secretBHash.length + pubkeyB.length + pubkeyB1.length + pubkeyB2.length + pubkeyA.length + pubkeyA1.length + pubkeyA2.length + txidAnchor.length + signatureA.length + signatureB.length);
byteBuffer.put(secretAHash);
byteBuffer.put(secretBHash);
byteBuffer.put(pubkeyB);
byteBuffer.put(pubkeyB1);
byteBuffer.put(pubkeyB2);
byteBuffer.put(pubkeyA);
byteBuffer.put(pubkeyA1);
byteBuffer.put(pubkeyA2);
byteBuffer.put(txidAnchor);
byteBuffer.put(signatureA);
byteBuffer.put(signatureB);
return byteBuffer.array();
}
@Override
public long getHashAsLong () {
ByteBuffer byteBuffer = ByteBuffer.allocate(8);
byteBuffer.put(Tools.hashSecret(this.getData()), 0, 8);
byteBuffer.flip();
return Math.abs(byteBuffer.getLong());
}
@Override
public int hashCode () {
int result = secretAHash != null ? Arrays.hashCode(secretAHash) : 0;
result = 31 * result + (secretBHash != null ? Arrays.hashCode(secretBHash) : 0);
result = 31 * result + (pubkeyB != null ? Arrays.hashCode(pubkeyB) : 0);
result = 31 * result + (pubkeyB1 != null ? Arrays.hashCode(pubkeyB1) : 0);
result = 31 * result + (pubkeyB2 != null ? Arrays.hashCode(pubkeyB2) : 0);
result = 31 * result + (pubkeyA != null ? Arrays.hashCode(pubkeyA) : 0);
result = 31 * result + (pubkeyA1 != null ? Arrays.hashCode(pubkeyA1) : 0);
result = 31 * result + (pubkeyA2 != null ? Arrays.hashCode(pubkeyA2) : 0);
result = 31 * result + (txidAnchor != null ? Arrays.hashCode(txidAnchor) : 0);
result = 31 * result + (signatureA != null ? Arrays.hashCode(signatureA) : 0);
result = 31 * result + (signatureB != null ? Arrays.hashCode(signatureB) : 0);
return result;
}
@Override
public String toString () {
return "PubkeyChannelObject{" + Tools.bytesToHex(getHash()) + "}";
}
@Override
public void verify () {
}
}