/* * This file is part of Bitsquare. * * Bitsquare is free software: you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or (at * your option) any later version. * * Bitsquare is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public * License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Bitsquare. If not, see <http://www.gnu.org/licenses/>. */ package io.bitsquare.crypto; import io.bitsquare.app.Version; import io.bitsquare.common.crypto.*; import io.bitsquare.p2p.NodeAddress; import io.bitsquare.p2p.messaging.MailboxMessage; import io.bitsquare.p2p.messaging.PrefixedSealedAndSignedMessage; import io.bitsquare.storage.FileUtil; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; 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.UUID; import static org.junit.Assert.assertEquals; public class EncryptionServiceTests { private static final Logger log = LoggerFactory.getLogger(EncryptionServiceTests.class); @Rule public ExpectedException thrown = ExpectedException.none(); private PubKeyRing pubKeyRing; 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); pubKeyRing = keyRing.getPubKeyRing(); } @After public void tearDown() throws IOException { FileUtil.deleteDirectory(dir); } @Test public void testDecryptAndVerifyMessage() throws CryptoException { EncryptionService encryptionService = new EncryptionService(keyRing); TestMessage data = new TestMessage("test"); PrefixedSealedAndSignedMessage encrypted = new PrefixedSealedAndSignedMessage(null, encryptionService.encryptAndSign(pubKeyRing, data), Hash.getHash("aa")); DecryptedMsgWithPubKey decrypted = encryptionService.decryptAndVerify(encrypted.sealedAndSigned); assertEquals(data.data, ((TestMessage) decrypted.message).data); } } final class TestMessage implements MailboxMessage { public String data = "test"; private final int messageVersion = Version.getP2PMessageVersion(); private String uid; public TestMessage(String data) { this.data = data; uid = UUID.randomUUID().toString(); } @Override public String getUID() { return uid; } @Override public NodeAddress getSenderNodeAddress() { return null; } @Override public int getMessageVersion() { return messageVersion; } }