Index: modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/ServerHelloDoneTest.java =================================================================== --- modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/ServerHelloDoneTest.java (revision 0) +++ modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/ServerHelloDoneTest.java (revision 0) @@ -0,0 +1,55 @@ +package org.apache.harmony.xnet.tests.provider.jsse; + +import java.io.IOException; + +import org.apache.harmony.xnet.provider.jsse.AlertException; +import org.apache.harmony.xnet.provider.jsse.Handshake; +import org.apache.harmony.xnet.provider.jsse.HandshakeIODataStream; +import org.apache.harmony.xnet.provider.jsse.ServerHelloDone; + +import junit.framework.TestCase; + +/** + * Tests for ServerHelloDone constructor and methods + * + */ +public class ServerHelloDoneTest extends TestCase { + + /* + * Class under test for void ServerHelloDone() + */ + public void testServerHelloDone() throws Exception { + + ServerHelloDone message = new ServerHelloDone(); + assertEquals("incorrect type", Handshake.SERVER_HELLO_DONE, message + .getType()); + assertEquals("incorrect ServerHelloDone", 0, message.length()); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + ServerHelloDone message_2 = new ServerHelloDone(in, message.length()); + assertEquals("incorrect message decoding", 0, message_2.length()); + + in.append(encoded); + try { + new ServerHelloDone(in, message.length() - 1); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + new ServerHelloDone(in, message.length() + 3); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } + +} \ No newline at end of file Index: modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/FinishedTest.java =================================================================== --- modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/FinishedTest.java (revision 0) +++ modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/FinishedTest.java (revision 0) @@ -0,0 +1,53 @@ +package org.apache.harmony.xnet.tests.provider.jsse; + +import java.util.Arrays; + +import org.apache.harmony.xnet.provider.jsse.AlertException; +import org.apache.harmony.xnet.provider.jsse.Finished; +import org.apache.harmony.xnet.provider.jsse.Handshake; +import org.apache.harmony.xnet.provider.jsse.HandshakeIODataStream; + +import junit.framework.TestCase; + +/** + * Tests for Finished constructor and methods + * + */ +public class FinishedTest extends TestCase { + + public void testFinished() throws Exception { + byte[] bytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2 }; + Finished message = new Finished(bytes); + assertEquals("incorrect type", Handshake.FINISHED, message.getType()); + assertTrue("incorrect CertificateVerify", Arrays.equals(message + .getData(), bytes)); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + Finished message_2 = new Finished(in, message.length()); + assertTrue("incorrect message decoding", Arrays.equals(message + .getData(), message_2.getData())); + + in.append(encoded); + try { + message_2 = new Finished(in, message.length() - 1); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + message_2 = new Finished(in, message.length() + 3); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } + +} \ No newline at end of file Index: modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/HelloRequestTest.java =================================================================== --- modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/HelloRequestTest.java (revision 0) +++ modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/HelloRequestTest.java (revision 0) @@ -0,0 +1,49 @@ +package org.apache.harmony.xnet.tests.provider.jsse; + +import org.apache.harmony.xnet.provider.jsse.AlertException; +import org.apache.harmony.xnet.provider.jsse.Handshake; +import org.apache.harmony.xnet.provider.jsse.HandshakeIODataStream; +import org.apache.harmony.xnet.provider.jsse.HelloRequest; + +import junit.framework.TestCase; + +/** + * Tests for HelloRequest constructor and methods + * + */ +public class HelloRequestTest extends TestCase { + + public void testHelloRequest() throws Exception { + HelloRequest message = new HelloRequest(); + assertEquals("incorrect type", Handshake.HELLO_REQUEST, message + .getType()); + assertEquals("incorrect HelloRequest", 0, message.length()); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + HelloRequest message_2 = new HelloRequest(in, message.length()); + assertEquals("incorrect message decoding", 0, message_2.length()); + + in.append(encoded); + try { + new HelloRequest(in, message.length() - 1); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + new HelloRequest(in, message.length() + 3); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } + +} \ No newline at end of file Index: modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ClientHelloTest.java =================================================================== --- modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ClientHelloTest.java (revision 0) +++ modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ClientHelloTest.java (revision 0) @@ -0,0 +1,66 @@ +package org.apache.harmony.xnet.provider.jsse; + +import java.io.IOException; +import java.security.SecureRandom; +import java.util.Arrays; + +import junit.framework.TestCase; + +/** + * Tests for ClientHello constructor and methods + * + */ +public class ClientHelloTest extends TestCase { + + + /* + * Test for ClientHello(SecureRandom, byte[], byte[], CipherSuite[]), + * ClientHello(HandshakeIODataStream, int), getType(), getRandom(), and + * send(); + */ + public void testClientHello() throws Exception { + byte[] ses_id = new byte[] {1,2,3,4,5,6,7,8,9,0}; + byte[] version = new byte[] {3, 1 }; + CipherSuite[] cipher_suite = new CipherSuite[] { + CipherSuite.TLS_RSA_WITH_RC4_128_MD5}; + ClientHello message = new ClientHello(new SecureRandom(), version, + ses_id, cipher_suite); + assertEquals("incorrect type", Handshake.CLIENT_HELLO, message.getType()); + assertEquals("incorrect length", 51, message.length()); + assertEquals("incorrect random", 32, message.getRandom().length); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + ClientHello message_2 = new ClientHello(in, message.length()); + + assertTrue("Incorrect message decoding", + Arrays.equals(message.client_version, message_2.client_version)); + assertTrue("Incorrect message decoding", + Arrays.equals(message.getRandom(), message_2.getRandom())); + + in.append(encoded); + try { + message_2 = new ClientHello(in, message.length()-1); + fail("Small length: No expected AlertException"); + } catch (AlertException e){ + } + + in.append(encoded); + try { + message_2 = new ClientHello(in, message.length()+ 1); + fail("Big length: No expected IO exception"); + } catch (IOException e){ + } + + in.append(encoded); + in.append(new byte[] {1,2,3}); + new ClientHello(in, message.length()+ 3); // extra bytes must be + // ignored + } + +} Index: modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerKeyExchangeTest.java =================================================================== --- modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerKeyExchangeTest.java (revision 0) +++ modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerKeyExchangeTest.java (revision 0) @@ -0,0 +1,170 @@ +package org.apache.harmony.xnet.provider.jsse; + +import java.io.IOException; +import java.math.BigInteger; +import java.util.Arrays; + +import junit.framework.TestCase; + +/** + * Tests for ServerKeyExchange constructor and methods + * + */ +public class ServerKeyExchangeTest extends TestCase { + + public void testServerKeyExchange_RSA_EXPORT() throws Exception { + BigInteger rsa_mod = new BigInteger( + "0620872145533812525365347773040950432706816921321053881493952289532007782427182339053847578435298266865073748931755945944874247298083566202475988854994079"); + BigInteger rsa_exp = new BigInteger("65537"); + + byte[] hash = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6 }; + ServerKeyExchange message = new ServerKeyExchange(rsa_mod, rsa_exp, + null, hash); + assertEquals("incorrect type", Handshake.SERVER_KEY_EXCHANGE, message + .getType()); + + assertTrue("incorrect ServerKeyExchange", Arrays.equals(message.hash, + hash)); + assertEquals("incorrect ServerKeyExchange", rsa_mod, message.par1); + assertEquals("incorrect ServerKeyExchange", rsa_exp, message.par2); + assertNull("incorrect ServerKeyExchange", message.par3); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + ServerKeyExchange message_2 = new ServerKeyExchange(in, message + .length(), CipherSuite.KeyExchange_RSA_EXPORT); + + assertTrue("incorrect message decoding", Arrays.equals(message.hash, + message_2.hash)); + assertEquals("incorrect message decoding", message.par1, message_2.par1); + assertEquals("incorrect message decoding", message.par2, message_2.par2); + assertNull("incorrect message decoding", message_2.par3); + assertEquals("incorrect message decoding", message.getRSAPublicKey(), + message_2.getRSAPublicKey()); + + in.append(encoded); + try { + new ServerKeyExchange(in, message.length() - 1, + CipherSuite.KeyExchange_RSA_EXPORT); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + new ServerKeyExchange(in, message.length() + 3, + CipherSuite.KeyExchange_RSA_EXPORT); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } + + public void testServerKeyExchange_DHE_DSS() throws Exception { + BigInteger dh_p = new BigInteger("1234567890"); + BigInteger dh_g = new BigInteger("987654321"); + BigInteger dh_Ys = new BigInteger("123123123"); + byte[] hash = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 0 }; + ServerKeyExchange message = new ServerKeyExchange(dh_p, dh_g, dh_Ys, + hash); + assertEquals("incorrect type", Handshake.SERVER_KEY_EXCHANGE, message + .getType()); + + assertTrue("incorrect ServerKeyExchange", Arrays.equals(message.hash, + hash)); + assertEquals("incorrect ServerKeyExchange", dh_p, message.par1); + assertEquals("incorrect ServerKeyExchange", dh_g, message.par2); + assertEquals("incorrect ServerKeyExchange", dh_Ys, message.par3); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + ServerKeyExchange message_2 = new ServerKeyExchange(in, message + .length(), CipherSuite.KeyExchange_DHE_DSS); + + assertTrue("incorrect message decoding", Arrays.equals(message.hash, + message_2.hash)); + assertEquals("incorrect message decoding", message.par1, message_2.par1); + assertEquals("incorrect message decoding", message.par2, message_2.par2); + assertEquals("incorrect message decoding", message.par3, message_2.par3); + + in.append(encoded); + try { + new ServerKeyExchange(in, message.length() - 1, + CipherSuite.KeyExchange_DHE_DSS); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + new ServerKeyExchange(in, message.length() + 3, + CipherSuite.KeyExchange_DHE_DSS); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } + + public void testServerKeyExchange_DH_anon() throws Exception { + BigInteger dh_p = new BigInteger("1234567890"); + BigInteger dh_g = new BigInteger("987654321"); + BigInteger dh_Ys = new BigInteger("123123123"); + ServerKeyExchange message = new ServerKeyExchange(dh_p, dh_g, dh_Ys, + null); + assertEquals("incorrect type", Handshake.SERVER_KEY_EXCHANGE, message + .getType()); + + assertNull("incorrect ServerKeyExchange", message.hash); + assertEquals("incorrect ServerKeyExchange", dh_p, message.par1); + assertEquals("incorrect ServerKeyExchange", dh_g, message.par2); + assertEquals("incorrect ServerKeyExchange", dh_Ys, message.par3); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + ServerKeyExchange message_2 = new ServerKeyExchange(in, message + .length(), CipherSuite.KeyExchange_DH_anon); + + assertNull("incorrect message decoding", message_2.hash); + assertEquals("incorrect message decoding", message.par1, message_2.par1); + assertEquals("incorrect message decoding", message.par2, message_2.par2); + assertEquals("incorrect message decoding", message.par3, message_2.par3); + + in.append(encoded); + try { + new ServerKeyExchange(in, message.length() - 1, + CipherSuite.KeyExchange_DH_anon); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + new ServerKeyExchange(in, message.length() + 3, + CipherSuite.KeyExchange_DH_anon); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } + +} \ No newline at end of file Index: modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/CertificateMessageTest.java =================================================================== --- modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/CertificateMessageTest.java (revision 0) +++ modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/CertificateMessageTest.java (revision 0) @@ -0,0 +1,107 @@ +package org.apache.harmony.xnet.provider.jsse; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.Arrays; + +import junit.framework.TestCase; + +/** + * Tests for CertificateMessage constructor and methods + * + */ +public class CertificateMessageTest extends TestCase { + + private static String base64certEncoding = "-----BEGIN CERTIFICATE-----\n" + + "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a" + + "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF" + + "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE" + + "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD" + + "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAYGBFUdIAAwZwYDVR0RAQH/B" + + "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG" + + "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY" + + "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG" + + "CCsGAQUFBwMBBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB" + + "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw" + + "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE" + + "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h" + + "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd" + + "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1" + + "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwGByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP" + + "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n" + + "-----END CERTIFICATE-----\n"; + + /* + * Test for CertificateMessage(null) and + * CertificateMessage(HandshakeIODataStream, int) + */ + public void testCertificateMessage1() throws Exception { + + CertificateMessage message = new CertificateMessage(null); + assertEquals("incorrect type", Handshake.CERTIFICATE, message.getType()); + assertEquals("incorrect message", 3, message.length()); + assertEquals("incorrect message", 0, message.certs.length); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + + CertificateMessage message_2 = new CertificateMessage(in, message.length()); + assertEquals("incorrect message_2", 3, message_2.length()); + assertEquals("incorrect message_2", 0, message_2.certs.length); + } + + /* + * Test for void CertificateMessage(X509Certificate[]), + * CertificateMessage(HandshakeIODataStream, int) + */ + public void testCertificateMessage2() throws Exception { + CertificateFactory certFactory = CertificateFactory.getInstance("X509"); + + ByteArrayInputStream bais = new ByteArrayInputStream(base64certEncoding + .getBytes()); + X509Certificate cert = (X509Certificate) certFactory.generateCertificate(bais); + CertificateMessage message = new CertificateMessage( + new X509Certificate[] { cert }); + assertEquals("incorrect type", Handshake.CERTIFICATE, message.getType()); + + assertTrue("incorrect cert encoding", Arrays.equals(message.certs[0] + .getEncoded(), cert.getEncoded())); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + CertificateMessage message_2 = new CertificateMessage(in, message.length()); + assertEquals("Incorrect message decoding", message.certs.length, message_2.certs.length); + assertTrue("incorrect cert encoding", Arrays.equals(message.certs[0] + .getEncoded(), message_2.certs[0].getEncoded())); + + in.append(encoded); + try { + message_2 = new CertificateMessage(in, message.length() - 1); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + message_2 = new CertificateMessage(in, message.length() + 3); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } + +} \ No newline at end of file Index: modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/CertificateVerifyTest.java =================================================================== --- modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/CertificateVerifyTest.java (revision 0) +++ modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/CertificateVerifyTest.java (revision 0) @@ -0,0 +1,60 @@ +package org.apache.harmony.xnet.provider.jsse; + +import java.util.Arrays; + +import junit.framework.TestCase; + +/** + * Tests for CertificateVerify constructor and methods + * + */ +public class CertificateVerifyTest extends TestCase { + + public void testCertificateVerify() throws Exception { + byte[] anonHash = new byte[0]; + byte[] RSAHash = new byte[] { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, + 1, 2, 3, 4, 5, 6}; + byte[] DSAHash = new byte[] { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; + byte[][] signatures = new byte[][] { anonHash, RSAHash, DSAHash }; + for (int i = 0; i < 3; i++) { + CertificateVerify message = new CertificateVerify(signatures[i]); + assertEquals("incorrect type", Handshake.CERTIFICATE_VERIFY, + message.getType()); + assertTrue("incorrect CertificateVerify", + Arrays.equals(message.signedHash, signatures[i])); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + CertificateVerify message_2 = new CertificateVerify(in, message.length()); + assertTrue("incorrect message decoding", + Arrays.equals(message.signedHash, message_2.signedHash)); + + in.append(encoded); + try { + message_2 = new CertificateVerify(in, message.length() - 1); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + message_2 = new CertificateVerify(in, message.length() + 3); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } + } + +} Index: modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ClientKeyExchangeTest.java =================================================================== --- modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ClientKeyExchangeTest.java (revision 0) +++ modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ClientKeyExchangeTest.java (revision 0) @@ -0,0 +1,175 @@ +package org.apache.harmony.xnet.provider.jsse; + +import java.io.IOException; +import java.math.BigInteger; +import java.util.Arrays; + +import junit.framework.TestCase; + +/** + * Tests for ClientKeyExchange constructor and methods + * + */ +public class ClientKeyExchangeTest extends TestCase { + + /* + * Test for void ClientKeyExchange(byte[], boolean) + */ + public void testClientKeyExchangebyteArrayboolean() throws Exception { + byte[] encrypted_pre_master_secret = new byte[] { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; + boolean[] isTLS = new boolean[] { true, false }; + + for (int i = 0; i < isTLS.length; i++) { + ClientKeyExchange message = new ClientKeyExchange( + encrypted_pre_master_secret, isTLS[i]); + assertEquals("incorrect type", Handshake.CLIENT_KEY_EXCHANGE, + message.getType()); + + assertTrue("incorrect ClientKeyExchange", Arrays.equals( + message.exchange_keys, encrypted_pre_master_secret)); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length ", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + ClientKeyExchange message_2 = new ClientKeyExchange(in, message + .length(), isTLS[i], true); + + assertTrue("Incorrect message decoding", Arrays.equals( + message.exchange_keys, message_2.exchange_keys)); + assertEquals("Incorrect message decoding", message.length(), + message_2.length()); + + in.append(encoded); + try { + message_2 = new ClientKeyExchange(in, message.length() - 1, + isTLS[i], true); + if (isTLS[i]) { + fail("Small length: No expected AlertException"); + } + } catch (AlertException e) { + if (!isTLS[i]) { + fail(e.toString()); + } + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + message_2 = new ClientKeyExchange(in, message.length() + 3, + isTLS[i], true); + if (isTLS[i]) { + fail("Extra bytes: No expected AlertException"); + } + } catch (AlertException e) { + if (!isTLS[i]) { + fail(e.toString()); + } + } + } + } + + /* + * Test for void ClientKeyExchange(BigInteger) + */ + public void testClientKeyExchangeBigInteger() throws Exception { + BigInteger dh_Yc = new BigInteger("1234567890"); + boolean[] isTLS = new boolean[] { true, false }; + + for (int i = 0; i < isTLS.length; i++) { + ClientKeyExchange message = new ClientKeyExchange(dh_Yc); + assertEquals("incorrect type", Handshake.CLIENT_KEY_EXCHANGE, + message.getType()); + assertEquals("incorrect ClientKeyExchange", dh_Yc, new BigInteger( + message.exchange_keys)); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + ClientKeyExchange message_2 = new ClientKeyExchange(in, message + .length(), isTLS[i], false); + + assertEquals("Incorrect message decoding", message.length(), + message_2.length()); + assertTrue("Incorrect message decoding", Arrays.equals( + message.exchange_keys, message_2.exchange_keys)); + + in.append(encoded); + try { + message_2 = new ClientKeyExchange(in, message.length() - 1, + isTLS[i], false); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + message_2 = new ClientKeyExchange(in, message.length() + 3, + isTLS[i], false); + fail("Extra bytes: No expected AlertException"); + } catch (AlertException e) { + } + } + } + + /* + * Test for void ClientKeyExchange() + */ + public void testClientKeyExchange() throws Exception { + + ClientKeyExchange message = new ClientKeyExchange(); + assertEquals("incorrect type", Handshake.CLIENT_KEY_EXCHANGE, message + .getType()); + assertEquals("incorrect ClientKeyExchange", 0, + message.exchange_keys.length); + assertEquals("incorrect ClientKeyExchange", 0, message.length()); + assertTrue("incorrect ClientKeyExchange", message.isEmpty()); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect ClientKeyExchange", 0, message.length()); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + ClientKeyExchange message_2 = new ClientKeyExchange(in, message + .length(), true, false); + + assertEquals("Incorrect message decoding", 0, + message_2.exchange_keys.length); + assertEquals("Incorrect message decoding", 0, message_2.length()); + assertTrue("Incorrect message decoding", message_2.isEmpty()); + + in.append(encoded); + try { + message_2 = new ClientKeyExchange(in, message.length() - 1, true, + false); + fail("Small length: No expected IOException"); + } catch (IOException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + message_2 = new ClientKeyExchange(in, message.length() + 3, true, + false); + fail("Extra bytes: No expected IOException"); + } catch (IOException e) { + } + } + +} \ No newline at end of file Index: modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerHelloTest.java =================================================================== --- modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerHelloTest.java (revision 0) +++ modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerHelloTest.java (revision 0) @@ -0,0 +1,66 @@ +package org.apache.harmony.xnet.provider.jsse; + +import java.io.IOException; +import java.security.SecureRandom; +import java.util.Arrays; + +import junit.framework.TestCase; + +/** + * Tests for ServerHello constructor and methods + * + */ +public class ServerHelloTest extends TestCase { + + public void testServerHello() throws Exception { + byte[] session_id = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; + CipherSuite cipher_suite = CipherSuite.TLS_DH_DSS_WITH_DES_CBC_SHA; + byte[] server_version = new byte[] { 3, 1 }; + ServerHello message = new ServerHello(new SecureRandom(), + server_version, session_id, cipher_suite, (byte) 0); + assertEquals("incorrect type", Handshake.SERVER_HELLO, message + .getType()); + + assertTrue("incorrect CertificateRequest", Arrays.equals( + message.server_version, server_version)); + assertTrue("incorrect CertificateRequest", Arrays.equals( + message.session_id, session_id)); + assertEquals("incorrect CertificateRequest", cipher_suite, + message.cipher_suite); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), + encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + ServerHello message_2 = new ServerHello(in, message.length()); + + assertTrue("incorrect message decoding", Arrays.equals( + message.server_version, message_2.server_version)); + assertTrue("incorrect message decoding", Arrays.equals( + message.session_id, message_2.session_id)); + assertTrue("incorrect message decoding", Arrays.equals(message.random, + message_2.random)); + assertEquals("incorrect message decoding", message.cipher_suite, + message_2.cipher_suite); + + in.append(encoded); + try { + new ServerHello(in, message.length() - 1); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + new ServerHello(in, message.length() + 3); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } + +} \ No newline at end of file Index: modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/CertificateRequestTest.java =================================================================== --- modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/CertificateRequestTest.java (revision 0) +++ modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/CertificateRequestTest.java (revision 0) @@ -0,0 +1,87 @@ +package org.apache.harmony.xnet.provider.jsse; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.Arrays; + +import javax.security.auth.x500.X500Principal; + +import junit.framework.TestCase; + +/** + * Test for CertificateRequest constructors and methods + * + */ +public class CertificateRequestTest extends TestCase { + + private static String base64certEncoding = "-----BEGIN CERTIFICATE-----\n" + + "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a" + + "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF" + + "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE" + + "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD" + + "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAYGBFUdIAAwZwYDVR0RAQH/B" + + "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG" + + "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY" + + "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG" + + "CCsGAQUFBwMBBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB" + + "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw" + + "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE" + + "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h" + + "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd" + + "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1" + + "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwGByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP" + + "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n" + + "-----END CERTIFICATE-----\n"; + +public void testCertificateRequest() throws Exception { + + CertificateFactory certFactory = CertificateFactory.getInstance("X509"); + ByteArrayInputStream bais = new ByteArrayInputStream(base64certEncoding + .getBytes()); + X509Certificate cert = (X509Certificate) certFactory.generateCertificate(bais); + X509Certificate[] accepted = {cert}; + X500Principal[] certificate_authorities = {cert.getIssuerX500Principal()}; + + byte[] certificate_types = new byte[] { CertificateRequest.RSA_SIGN, + CertificateRequest.RSA_FIXED_DH }; + CertificateRequest message = new CertificateRequest(certificate_types, + accepted); + assertEquals("incorrect type", Handshake.CERTIFICATE_REQUEST, message + .getType()); + assertTrue("incorrect CertificateRequest", Arrays.equals( + message.certificate_types, certificate_types)); + assertTrue("incorrect CertificateRequest", Arrays.equals( + message.certificate_authorities, certificate_authorities)); + + HandshakeIODataStream out = new HandshakeIODataStream(); + message.send(out); + byte[] encoded = out.getData(1000); + assertEquals("incorrect out data length", message.length(), encoded.length); + + HandshakeIODataStream in = new HandshakeIODataStream(); + in.append(encoded); + CertificateRequest message_2 = new CertificateRequest(in, message.length()); + assertTrue("incorrect message decoding", + Arrays.equals(message.certificate_types, message_2.certificate_types)); + assertTrue("incorrect message decoding", + Arrays.equals(message.certificate_authorities, message_2.certificate_authorities)); + + in.append(encoded); + try { + message_2 = new CertificateRequest(in, message.length() - 1); + fail("Small length: No expected AlertException"); + } catch (AlertException e) { + } + + in.append(encoded); + in.append(new byte[] { 1, 2, 3 }); + try { + message_2 = new CertificateRequest(in, message.length() + 3); + fail("Extra bytes: No expected AlertException "); + } catch (AlertException e) { + } + } +} \ No newline at end of file Index: modules/x-net/build.xml =================================================================== --- modules/x-net/build.xml (revision 428654) +++ modules/x-net/build.xml (working copy) @@ -101,6 +101,13 @@ + + + + + + + @@ -130,6 +137,21 @@ + + + + + + + + + + + + + + +