diff --git a/common/src/main/java/io/bitsquare/common/crypto/Encryption.java b/common/src/main/java/io/bitsquare/common/crypto/Encryption.java index 5099a6938d..bb9a0adaf2 100644 --- a/common/src/main/java/io/bitsquare/common/crypto/Encryption.java +++ b/common/src/main/java/io/bitsquare/common/crypto/Encryption.java @@ -37,7 +37,7 @@ public class Encryption { private static final Logger log = LoggerFactory.getLogger(Encryption.class); public static final String ASYM_KEY_ALGO = "RSA"; - private static final String ASYM_CIPHER = "RSA/ECB/PKCS1Padding"; + private static final String ASYM_CIPHER = "RSA/None/OAEPWithSHA256AndMGF1Padding"; private static final String SYM_KEY_ALGO = "AES"; private static final String SYM_CIPHER = "AES"; diff --git a/common/src/main/resources/logback.xml b/common/src/main/resources/logback.xml new file mode 100644 index 0000000000..de468733bc --- /dev/null +++ b/common/src/main/resources/logback.xml @@ -0,0 +1,47 @@ + + + + + %highlight(%d{MMM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{15}: %msg %xEx%n) + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/test/java/io/bitsquare/common/crypto/EncryptionTest.java b/common/src/test/java/io/bitsquare/common/crypto/EncryptionTest.java new file mode 100644 index 0000000000..7be39a9f24 --- /dev/null +++ b/common/src/test/java/io/bitsquare/common/crypto/EncryptionTest.java @@ -0,0 +1,80 @@ +package io.bitsquare.common.crypto; + +import io.bitsquare.common.util.Utilities; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.Security; +import java.security.cert.CertificateException; +import java.util.Random; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class EncryptionTest { + private static final Logger log = LoggerFactory.getLogger(EncryptionTest.class); + private KeyRing keyRing; + private File dir; + + @Before + public void setup() throws CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException, CryptoException { + Security.addProvider(new BouncyCastleProvider()); + dir = File.createTempFile("temp_tests", ""); + dir.delete(); + dir.mkdir(); + KeyStorage keyStorage = new KeyStorage(dir); + keyRing = new KeyRing(keyStorage); + } + + @After + public void tearDown() throws IOException { + Utilities.deleteDirectory(dir); + } + + + @Test + public void testDecryptHybridWithSignature() { + long ts = System.currentTimeMillis(); + log.trace("start "); + for (int i = 0; i < 100; i++) { + MockMessage payload = new MockMessage(new Random().nextInt()); + SealedAndSigned sealedAndSigned = null; + try { + sealedAndSigned = Encryption.encryptHybridWithSignature(payload, + keyRing.getSignatureKeyPair(), keyRing.getPubKeyRing().getEncryptionPubKey()); + } catch (CryptoException e) { + log.error("encryptHybridWithSignature failed"); + e.printStackTrace(); + assertTrue(false); + } + try { + DecryptedDataTuple tuple = Encryption.decryptHybridWithSignature(sealedAndSigned, keyRing.getEncryptionKeyPair().getPrivate()); + assertEquals(((MockMessage) tuple.payload).nonce, payload.nonce); + } catch (CryptoException e) { + log.error("decryptHybridWithSignature failed"); + e.printStackTrace(); + assertTrue(false); + } + } + log.trace("took " + (System.currentTimeMillis() - ts) + " ms."); + } + + private static class MockMessage implements Serializable { + public int nonce; + + public MockMessage(int nonce) { + this.nonce = nonce; + } + } +} + + diff --git a/common/src/test/java/io/bitsquare/common/crypto/SigTest.java b/common/src/test/java/io/bitsquare/common/crypto/SigTest.java new file mode 100644 index 0000000000..0cda4fc037 --- /dev/null +++ b/common/src/test/java/io/bitsquare/common/crypto/SigTest.java @@ -0,0 +1,68 @@ +package io.bitsquare.common.crypto; + +import io.bitsquare.common.util.Utilities; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.Security; +import java.security.cert.CertificateException; +import java.util.Random; + +import static org.junit.Assert.assertTrue; + +public class SigTest { + private static final Logger log = LoggerFactory.getLogger(SigTest.class); + private KeyRing keyRing; + private File dir; + + @Before + public void setup() throws CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException, CryptoException { + Security.addProvider(new BouncyCastleProvider()); + dir = File.createTempFile("temp_tests", ""); + dir.delete(); + dir.mkdir(); + KeyStorage keyStorage = new KeyStorage(dir); + keyRing = new KeyRing(keyStorage); + } + + @After + public void tearDown() throws IOException { + Utilities.deleteDirectory(dir); + } + + + @Test + public void testSignature() { + long ts = System.currentTimeMillis(); + log.trace("start "); + for (int i = 0; i < 100; i++) { + String msg = String.valueOf(new Random().nextInt()); + String sig = null; + try { + sig = Sig.sign(keyRing.getSignatureKeyPair().getPrivate(), msg); + } catch (CryptoException e) { + log.error("sign failed"); + e.printStackTrace(); + assertTrue(false); + } + try { + assertTrue(Sig.verify(keyRing.getSignatureKeyPair().getPublic(), msg, sig)); + } catch (CryptoException e) { + log.error("verify failed"); + e.printStackTrace(); + assertTrue(false); + } + } + log.trace("took " + (System.currentTimeMillis() - ts) + " ms."); + } +} + + 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 b7787d697a..0b43672d85 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java @@ -491,7 +491,6 @@ public class MainViewModel implements ViewModel { .onClose(() -> Utilities.openWebPage("https://github.com/bitsquare/bitsquare/issues")) .show()); } - } }; checkCryptoThread.start();