package network.thunder.core.etc;
import network.thunder.core.communication.objects.lightning.subobjects.ChannelStatus;
import network.thunder.core.communication.objects.messages.impl.factories.MesssageFactoryImpl;
import network.thunder.core.communication.objects.messages.impl.message.lnpayment.LNPaymentAMessage;
import network.thunder.core.communication.objects.messages.impl.message.lnpayment.LNPaymentBMessage;
import network.thunder.core.communication.objects.messages.impl.message.lnpayment.LNPaymentCMessage;
import network.thunder.core.communication.objects.messages.impl.message.lnpayment.LNPaymentDMessage;
import network.thunder.core.communication.objects.messages.interfaces.factories.LNPaymentMessageFactory;
import network.thunder.core.database.objects.Channel;
import network.thunder.core.lightning.RevocationHash;
import org.bitcoinj.crypto.TransactionSignature;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* Created by matsjerratsch on 14/01/2016.
*/
public class LNPaymentMessageFactoryMock extends MesssageFactoryImpl implements LNPaymentMessageFactory {
Random random = new Random();
@Override
public LNPaymentAMessage getMessageA (Channel channel, ChannelStatus statusTemp) {
if (statusTemp == null) {
statusTemp = new ChannelStatus();
}
return new LNPaymentAMessage(statusTemp, getMockRevocationHash());
}
@Override
public LNPaymentBMessage getMessageB (Channel channel) {
return new LNPaymentBMessage(getMockRevocationHash());
}
@Override
public LNPaymentCMessage getMessageC (Channel channel, List<TransactionSignature> channelSignatures, List<TransactionSignature> paymentSignatures) {
List<byte[]> list = new ArrayList<>();
list.add(getMockSig());
list.add(getMockSig());
return new LNPaymentCMessage(getMockSig(), getMockSig(), list);
}
@Override
public LNPaymentDMessage getMessageD (Channel channel) {
return new LNPaymentDMessage(new ArrayList<>());
}
private RevocationHash getMockRevocationHash () {
byte[] secret = new byte[20];
random.nextBytes(secret);
byte[] hash = Tools.hashSecret(secret);
RevocationHash revocationHash = new RevocationHash(1, 1, secret, hash);
return revocationHash;
}
private byte[] getMockSig () {
byte[] sig = new byte[72];
random.nextBytes(sig);
return sig;
}
}