package org.limewire.security.certificate; import java.io.IOException; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import javax.crypto.KeyGenerator; import junit.framework.Test; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.limewire.security.LimeWireSecurityModule; import org.limewire.security.certificate.CipherProvider.CipherType; import org.limewire.security.certificate.CipherProvider.SignatureType; import org.limewire.util.BaseTestCase; import org.limewire.util.StringUtils; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; public class CipherProviderTest extends BaseTestCase { private CipherProvider cipherProvider; public CipherProviderTest(String name) { super(name); } public static Test suite() { return buildTestSuite(CipherProviderTest.class); } public void testEncyptDecryptCycleRSA() throws NoSuchAlgorithmException, IOException { byte[] plaintext = StringUtils.toAsciiBytes("I'm a test."); KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); generator.initialize(1024); KeyPair keyPair = generator.generateKeyPair(); System.out.println(keyPair.getPrivate().getAlgorithm()); byte[] ciphertext = cipherProvider.encrypt(plaintext, keyPair.getPrivate(), CipherType.RSA); assertGreaterThan(0, ciphertext.length); byte[] plaintext2 = cipherProvider.decrypt(ciphertext, keyPair.getPublic(), CipherType.RSA); assertEquals(plaintext, plaintext2); } public void testEncyptDecryptCycleAES() throws NoSuchAlgorithmException, IOException { byte[] plaintext = StringUtils.toAsciiBytes("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " + "Pellentesque posuere, metus nonummy molestie dictum, ligula eros nonummy " + "pede, sit amet bibendum risus risus eget turpis. Nam porttitor ultrices " + "enim. Quisque ut nibh non tortor vestibulum dapibus. Fusce risus. Morbi " + "molestie egestas lacus. Morbi bibendum. Maecenas bibendum, risus at aliquam " + "vehicula, pede magna bibendum risus, at viverra sem est eget elit. Donec id " + "nisl non lacus semper lobortis. Mauris non nibh. Curabitur non mauris. Maecenas " + "sit amet leo placerat enim placerat gravida."); KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); // 192 and 256 bits may not be available Key key = kgen.generateKey(); byte[] ciphertext = cipherProvider.encrypt(plaintext, key, CipherType.AES); assertGreaterThan(0, ciphertext.length); byte[] plaintext2 = cipherProvider.decrypt(ciphertext, key, CipherType.AES); assertEquals(plaintext, plaintext2); } public void testSignVerifyCycleRSA() throws NoSuchAlgorithmException, IOException { byte[] plaintext = StringUtils.toAsciiBytes("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " + "Pellentesque posuere, metus nonummy molestie dictum, ligula eros nonummy " + "pede, sit amet bibendum risus risus eget turpis. Nam porttitor ultrices " + "enim. Quisque ut nibh non tortor vestibulum dapibus. Fusce risus. Morbi " + "molestie egestas lacus. Morbi bibendum. Maecenas bibendum, risus at aliquam " + "vehicula, pede magna bibendum risus, at viverra sem est eget elit. Donec id " + "nisl non lacus semper lobortis. Mauris non nibh. Curabitur non mauris. Maecenas " + "sit amet leo placerat enim placerat gravida."); KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); generator.initialize(1024); KeyPair keyPair = generator.generateKeyPair(); byte[] signature = cipherProvider.sign(plaintext, keyPair.getPrivate(), SignatureType.SHA1_WITH_RSA); assertGreaterThan(0, signature.length); assertTrue(cipherProvider.verify(plaintext, signature, keyPair.getPublic(), SignatureType.SHA1_WITH_RSA)); } @Override protected void setUp() throws Exception { Injector injector = Guice.createInjector(new LimeWireSecurityModule(), new AbstractModule() { @Override protected void configure() { bind(HttpClient.class).to(DefaultHttpClient.class); } }); cipherProvider = injector.getInstance(CipherProvider.class); } }