From 6721131ccf5a593bfc7d1de11bf490f079f7463e Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 16 Mar 2016 23:59:08 +0100 Subject: [PATCH] Refactorings, add decryption to crypt test at startup --- .../messages/DepositTxPublishedMessage.java | 3 ++- .../messages/FiatTransferStartedMessage.java | 3 ++- .../trade/messages/FinalizePayoutTxRequest.java | 3 ++- .../trade/messages/PayDepositRequest.java | 3 ++- .../trade/messages/PayoutTxFinalizedMessage.java | 3 ++- .../io/bitsquare/gui/main/MainViewModel.java | 16 +++++++++++----- .../io/bitsquare/crypto/EncryptionService.java | 4 +--- .../main/java/io/bitsquare/p2p/P2PService.java | 13 ++++++++----- .../bitsquare/p2p/messaging/DirectMessage.java | 1 - 9 files changed, 30 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/DepositTxPublishedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/DepositTxPublishedMessage.java index cd8284e646..d21c1be725 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/DepositTxPublishedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/DepositTxPublishedMessage.java @@ -32,12 +32,13 @@ public final class DepositTxPublishedMessage extends TradeMessage implements Mai public final byte[] depositTx; private final NodeAddress senderNodeAddress; - private final String uid = UUID.randomUUID().toString(); + private final String uid; public DepositTxPublishedMessage(String tradeId, byte[] depositTx, NodeAddress senderNodeAddress) { super(tradeId); this.depositTx = depositTx; this.senderNodeAddress = senderNodeAddress; + uid = UUID.randomUUID().toString(); } @Override diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/FiatTransferStartedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/FiatTransferStartedMessage.java index 1114c8eb64..227b23d496 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/FiatTransferStartedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/FiatTransferStartedMessage.java @@ -31,12 +31,13 @@ public final class FiatTransferStartedMessage extends TradeMessage implements Ma public final String buyerPayoutAddress; private final NodeAddress senderNodeAddress; - private final String uid = UUID.randomUUID().toString(); + private final String uid; public FiatTransferStartedMessage(String tradeId, String buyerPayoutAddress, NodeAddress senderNodeAddress) { super(tradeId); this.buyerPayoutAddress = buyerPayoutAddress; this.senderNodeAddress = senderNodeAddress; + uid = UUID.randomUUID().toString(); } @Override diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/FinalizePayoutTxRequest.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/FinalizePayoutTxRequest.java index c61a06e18f..2d7b38774a 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/FinalizePayoutTxRequest.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/FinalizePayoutTxRequest.java @@ -34,7 +34,7 @@ public final class FinalizePayoutTxRequest extends TradeMessage implements Mailb public final String sellerPayoutAddress; public final long lockTimeAsBlockHeight; private final NodeAddress senderNodeAddress; - private final String uid = UUID.randomUUID().toString(); + private final String uid; public FinalizePayoutTxRequest(String tradeId, byte[] sellerSignature, @@ -46,6 +46,7 @@ public final class FinalizePayoutTxRequest extends TradeMessage implements Mailb this.sellerPayoutAddress = sellerPayoutAddress; this.lockTimeAsBlockHeight = lockTimeAsBlockHeight; this.senderNodeAddress = senderNodeAddress; + uid = UUID.randomUUID().toString(); } @Override diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/PayDepositRequest.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/PayDepositRequest.java index 6b85a45d29..60b36531a8 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/PayDepositRequest.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/PayDepositRequest.java @@ -47,7 +47,7 @@ public final class PayDepositRequest extends TradeMessage implements MailboxMess public final ArrayList acceptedArbitratorNodeAddresses; public final NodeAddress arbitratorNodeAddress; private final NodeAddress senderNodeAddress; - private final String uid = UUID.randomUUID().toString(); + private final String uid; public PayDepositRequest(NodeAddress senderNodeAddress, String tradeId, @@ -77,6 +77,7 @@ public final class PayDepositRequest extends TradeMessage implements MailboxMess this.takeOfferFeeTxId = takeOfferFeeTxId; this.acceptedArbitratorNodeAddresses = acceptedArbitratorNodeAddresses; this.arbitratorNodeAddress = arbitratorNodeAddress; + uid = UUID.randomUUID().toString(); } @Override diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/PayoutTxFinalizedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/PayoutTxFinalizedMessage.java index 57125d5e35..ee498fd400 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/PayoutTxFinalizedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/messages/PayoutTxFinalizedMessage.java @@ -32,12 +32,13 @@ public final class PayoutTxFinalizedMessage extends TradeMessage implements Mail public final byte[] payoutTx; private final NodeAddress senderNodeAddress; - private final String uid = UUID.randomUUID().toString(); + private final String uid; public PayoutTxFinalizedMessage(String tradeId, byte[] payoutTx, NodeAddress senderNodeAddress) { super(tradeId); this.payoutTx = payoutTx; this.senderNodeAddress = senderNodeAddress; + uid = UUID.randomUUID().toString(); } @Override diff --git a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java index 45dec0c08f..dc2c39f077 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java @@ -35,9 +35,7 @@ import io.bitsquare.btc.pricefeed.PriceFeed; import io.bitsquare.common.Clock; import io.bitsquare.common.Timer; import io.bitsquare.common.UserThread; -import io.bitsquare.common.crypto.CryptoException; -import io.bitsquare.common.crypto.Encryption; -import io.bitsquare.common.crypto.KeyRing; +import io.bitsquare.common.crypto.*; import io.bitsquare.common.util.Utilities; import io.bitsquare.gui.Navigation; import io.bitsquare.gui.common.model.ViewModel; @@ -56,6 +54,7 @@ import io.bitsquare.p2p.P2PServiceListener; import io.bitsquare.p2p.network.CloseConnectionReason; import io.bitsquare.p2p.network.Connection; import io.bitsquare.p2p.network.ConnectionListener; +import io.bitsquare.p2p.peers.keepalive.messages.Ping; import io.bitsquare.payment.OKPayAccount; import io.bitsquare.trade.Trade; import io.bitsquare.trade.TradeManager; @@ -467,9 +466,16 @@ public class MainViewModel implements ViewModel { try { log.trace("Run crypto test"); // just use any simple dummy msg - Encryption.encryptHybridWithSignature(new io.bitsquare.p2p.peers.keepalive.messages.Ping(0, 0), + io.bitsquare.p2p.peers.keepalive.messages.Ping payload = new Ping(1, 1); + SealedAndSigned sealedAndSigned = Encryption.encryptHybridWithSignature(payload, keyRing.getSignatureKeyPair(), keyRing.getPubKeyRing().getEncryptionPubKey()); - log.trace("Crypto test succeeded"); + DecryptedDataTuple tuple = Encryption.decryptHybridWithSignature(sealedAndSigned, keyRing.getEncryptionKeyPair().getPrivate()); + if (tuple.payload instanceof Ping && + ((Ping) tuple.payload).nonce == payload.nonce && + ((Ping) tuple.payload).lastRoundTripTime == payload.lastRoundTripTime) + log.trace("Crypto test succeeded"); + else + throw new CryptoException("Payload not correct after decryption"); } catch (CryptoException e) { e.printStackTrace(); String msg = "Seems that you use a self compiled binary and have not following the build " + diff --git a/network/src/main/java/io/bitsquare/crypto/EncryptionService.java b/network/src/main/java/io/bitsquare/crypto/EncryptionService.java index e5af3a0d6b..e9248ef7e7 100644 --- a/network/src/main/java/io/bitsquare/crypto/EncryptionService.java +++ b/network/src/main/java/io/bitsquare/crypto/EncryptionService.java @@ -21,7 +21,6 @@ import io.bitsquare.common.crypto.*; import io.bitsquare.p2p.Message; import javax.inject.Inject; -import java.security.KeyPair; public class EncryptionService { private final KeyRing keyRing; @@ -32,8 +31,7 @@ public class EncryptionService { } public SealedAndSigned encryptAndSign(PubKeyRing pubKeyRing, Message message) throws CryptoException { - KeyPair signatureKeyPair = keyRing.getSignatureKeyPair(); - return Encryption.encryptHybridWithSignature(message, signatureKeyPair, pubKeyRing.getEncryptionPubKey()); + return Encryption.encryptHybridWithSignature(message, keyRing.getSignatureKeyPair(), pubKeyRing.getEncryptionPubKey()); } public DecryptedMsgWithPubKey decryptAndVerify(SealedAndSigned sealedAndSigned) throws CryptoException { diff --git a/network/src/main/java/io/bitsquare/p2p/P2PService.java b/network/src/main/java/io/bitsquare/p2p/P2PService.java index a080cf0437..384b189b5b 100644 --- a/network/src/main/java/io/bitsquare/p2p/P2PService.java +++ b/network/src/main/java/io/bitsquare/p2p/P2PService.java @@ -348,9 +348,9 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis log.info("Wrong receiverAddressMaskHash. The message is not intended for us."); } } catch (CryptoException e) { - log.warn(message.toString()); - log.warn(e.toString()); - log.warn("Decryption of SealedAndSignedMessage failed. " + + log.info(message.toString()); + log.info(e.toString()); + log.info("Decryption of prefixedSealedAndSignedMessage.sealedAndSigned failed. " + "That is expected if the message is not intended for us."); } } @@ -416,6 +416,8 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis }); } catch (CryptoException e) { e.printStackTrace(); + log.error(message.toString()); + log.error(e.toString()); sendDirectMessageListener.onFault(); } } @@ -450,8 +452,9 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis "decryptedMsgWithPubKey.message=", decryptedMsgWithPubKey.message); } } catch (CryptoException e) { - log.trace("Decryption of SealedAndSignedMessage failed. " + - "That is expected if the message is not intended for us. " + e.getMessage()); + log.info(e.toString()); + log.info("Decryption of prefixedSealedAndSignedMessage.sealedAndSigned failed. " + + "That is expected if the message is not intended for us."); } } else { log.info("Wrong blurredAddressHash. The message is not intended for us."); diff --git a/network/src/main/java/io/bitsquare/p2p/messaging/DirectMessage.java b/network/src/main/java/io/bitsquare/p2p/messaging/DirectMessage.java index edaa78e411..6d134d7dd0 100644 --- a/network/src/main/java/io/bitsquare/p2p/messaging/DirectMessage.java +++ b/network/src/main/java/io/bitsquare/p2p/messaging/DirectMessage.java @@ -20,5 +20,4 @@ package io.bitsquare.p2p.messaging; import io.bitsquare.p2p.Message; public interface DirectMessage extends Message { - }