package de.uni_bonn.bit;
import de.uni_bonn.bit.wallet_protocol.IPairingProtocol;
import de.uni_bonn.bit.wallet_protocol.IWalletProtocol;
import de.uni_bonn.bit.wallet_protocol.PairingMessage;
import de.uni_bonn.bit.wallet_protocol.ZKProofInit;
import org.apache.avro.ipc.NettyServer;
import org.apache.avro.ipc.NettyTransceiver;
import org.apache.avro.ipc.reflect.ReflectRequestor;
import org.apache.avro.ipc.reflect.ReflectResponder;
import org.bitcoinj.core.ECKey;
import org.junit.Test;
import java.io.IOException;
import java.math.BigInteger;
import java.net.InetSocketAddress;
import static de.uni_bonn.bit.BitcoinECMathHelper.convertPointToPubKEy;
import static de.uni_bonn.bit.BitcoinECMathHelper.convertPrivKeyToBigInt;
import static de.uni_bonn.bit.BitcoinECMathHelper.convertPubKeyToPoint;
import static de.uni_bonn.bit.BitcoinECMathHelper.convertBigIntToPrivKey;
/**
* Created by chris on 17.11.14.
*/
public class PairingSerializationTest {
@Test
public void testThePairingProtocol() throws IOException {
PaillierKeyPair myKeyPair = PaillierKeyPair.generatePaillierKeyPair();
BCParameters myBCParameters = BCParameters.generateBCParameters();
ECKey myECKey = convertBigIntToPrivKey(new BigInteger("2"));
PairingProtocolTestImpl impl = new PairingProtocolTestImpl();
NettyServer server = new NettyServer(new ReflectResponder(IPairingProtocol.class,
impl), new InetSocketAddress(20000));
NettyTransceiver transceiver = new NettyTransceiver(new InetSocketAddress(20000));
IPairingProtocol proxy = ReflectRequestor.getClient(IPairingProtocol.class, transceiver);
ZKProofInit myZKProof = ZKProofInit.generate(myBCParameters, "Desktop init");
PairingMessage msg = new PairingMessage(convertPubKeyToPoint(myECKey),
myKeyPair.clearPrivateKey(), myBCParameters.clearPrivate(), myZKProof);
PairingMessage answer = proxy.pair(msg);
answer.getZkProofInit().verify(answer.getBcParameters(), "Phone init");
server.close();
}
public static class PairingProtocolTestImpl implements IPairingProtocol{
PaillierKeyPair myKeyPair;
BCParameters myBCParameters;
ECKey myECKey;
public PairingProtocolTestImpl(){
myKeyPair = PaillierKeyPair.generatePaillierKeyPair();
myBCParameters = BCParameters.generateBCParameters();
myECKey = convertBigIntToPrivKey(new BigInteger("2"));
}
@Override
public PairingMessage pair(PairingMessage pairingMessage) {
pairingMessage.getZkProofInit().verify(pairingMessage.getBcParameters(), "Desktop init");
ZKProofInit myZKProof = ZKProofInit.generate(myBCParameters, "Phone init");
PairingMessage answer = new PairingMessage(convertPubKeyToPoint(myECKey), myKeyPair.clearPrivateKey(),
myBCParameters.clearPrivate(), myZKProof);
return answer;
}
}
}