diff options
author | Casey Marshall <csm@gnu.org> | 2006-06-11 07:23:24 +0000 |
---|---|---|
committer | Casey Marshall <csm@gnu.org> | 2006-06-11 07:23:24 +0000 |
commit | 0d6b3c6bd6181ca9bd6c2b3fd1dc5caf0b8433c4 (patch) | |
tree | a3f8191e4ae8622ec146f38ef841390f388e228d | |
parent | bbc0c3289deeb1a685316abd0bffee15bd40a46a (diff) | |
download | classpath-0d6b3c6bd6181ca9bd6c2b3fd1dc5caf0b8433c4.tar.gz |
2006-06-10 Casey Marshall <csm@gnu.org>
* jessie-tests/testClientHello.java: update for extensions
changes.
* jessie-tests/testExtensionList.java: likewise.
* jessie-tests/testServerHello.java: likewise.
-rw-r--r-- | ChangeLog-ssl-nio | 38 | ||||
-rw-r--r-- | jessie-tests/testClientHello.java | 93 | ||||
-rw-r--r-- | jessie-tests/testServerHello.java | 64 |
3 files changed, 193 insertions, 2 deletions
diff --git a/ChangeLog-ssl-nio b/ChangeLog-ssl-nio index ffca8bdac..4da5570cb 100644 --- a/ChangeLog-ssl-nio +++ b/ChangeLog-ssl-nio @@ -1,3 +1,41 @@ +2006-06-10 Casey Marshall <csm@gnu.org> + + * jessie-tests/testClientHello.java: update for extensions + changes. + * jessie-tests/testExtensionList.java: likewise. + * jessie-tests/testServerHello.java: likewise. + +2006-06-10 Casey Marshall <csm@gnu.org> + + * gnu/javax/net/ssl/provider/ServerHello.java (extensions): return + an ExtensionList. + (setExtensionsLength): set the length in the buffer. + (toString): print out individual extensions. + * gnu/javax/net/ssl/provider/Extension.java (valueBytes): new + method. + (valueBuffer): new method. + (value): return an Extenion.Value. + (toString): print out extension value. + (Value): new abstract inner class. + * gnu/javax/net/ssl/provider/ClientHello.java (extensions): return + an ExtensionList. + (setExtensionListLength): set the length in the buffer. + (toString): print out extensions. + * gnu/javax/net/ssl/provider/ServerHandshake.java + (chooseSuite, chooseCompression): use generics and foreach loops. + * gnu/javax/net/ssl/provider/ExtensionList.java: new class. + * gnu/javax/net/ssl/provider/MaxFragmentLength.java: new class. + * gnu/javax/net/ssl/provider/CertificateURL.java: new class. + * gnu/javax/net/ssl/provider/UnresolvedExtensionValue.java: new + class. + * gnu/javax/net/ssl/provider/TruncatedHMAC.java: new class. + * gnu/javax/net/ssl/provider/ServerNameList.java: new class. + * gnu/javax/net/ssl/provider/TrustedAuthorities.java: new class. + * gnu/javax/net/ssl/provider/CertificateStatusType.java: new + class. + * gnu/javax/net/ssl/provider/CertificateStatusRequest.java: new + class. + 2006-06-05 Casey Marshall <csm@gnu.org> * gnu/javax/net/ssl/provider/Extension.java: add Javadoc. diff --git a/jessie-tests/testClientHello.java b/jessie-tests/testClientHello.java index d3c8ba802..3cfedf97c 100644 --- a/jessie-tests/testClientHello.java +++ b/jessie-tests/testClientHello.java @@ -5,6 +5,8 @@ import gnu.javax.net.ssl.provider.CipherSuiteList; import gnu.javax.net.ssl.provider.ClientHello; import gnu.javax.net.ssl.provider.CompressionMethod; import gnu.javax.net.ssl.provider.CompressionMethodList; +import gnu.javax.net.ssl.provider.Extension; +import gnu.javax.net.ssl.provider.ExtensionList; import gnu.javax.net.ssl.provider.ProtocolVersion; import gnu.javax.net.ssl.provider.Handshake; import gnu.javax.net.ssl.provider.Random; @@ -71,7 +73,15 @@ class testClientHello comps.put (0, CompressionMethod.NULL); comps.put (1, CompressionMethod.ZLIB); - hello.setExtensionsLength (0); + hello.setExtensionsLength (12); + ExtensionList exts = hello.extensions(); + // Max fragment length of 2^9-1 + exts.set (0, Extension.Type.MAX_FRAGMENT_LENGTH, 1); // 2 + 2 + 1 + exts.get (0).setValue (new byte[] { 1 }); + // Zero-length server name. + exts.set (1, Extension.Type.SERVER_NAME, 3); // 2 + 2 + 3 + exts.get(1).setValue(new byte[3]); + handshake.setLength (hello.length ()); handshake = new Handshake (buffer); @@ -101,7 +111,88 @@ class testClientHello System.out.println ("PASS: compressionMethods()"); else System.out.println ("FAIL: compressionMethods()"); + + exts = hello.extensions(); + if (exts.size() == 2) + System.out.println ("PASS: extensions().size"); + else + System.out.println ("FAIL: extensions().size"); + if (exts.length () == 12) + System.out.println ("PASS: extensions().length"); + else + System.out.println ("FAIL: extensions().length"); + + Extension e = exts.get(0); + if (e.type() == Extension.Type.MAX_FRAGMENT_LENGTH) + System.out.println ("PASS: get(0).type()"); + else + System.out.println ("FAIL: get(0).type()"); + if (Arrays.equals (e.valueBytes(), new byte[] { 1 })) + System.out.println ("PASS: get(0).value()"); + else + System.out.println ("FAIL: get(0).value()"); + + e = exts.get(1); + if (e.type () == Extension.Type.SERVER_NAME) + System.out.println ("PASS: get(1).type()"); + else + System.out.println ("FAIL: get(1).type()"); + if (Arrays.equals(e.valueBytes(), new byte[3])) + System.out.println ("PASS: get(1).value()"); + else + System.out.println ("FAIL: get(1).value()"); System.err.println (handshake); + + // Part 2: no extensions. + buffer = ByteBuffer.allocate(96); + handshake = new Handshake (buffer); + + handshake.setType (Handshake.Type.CLIENT_HELLO); + handshake.setLength (92); + + hello = null; + hello = (ClientHello) handshake.body (); + + sessionId = new byte[32]; + for (int i = 0; i < 32; i++) + sessionId[i] = (byte) i; + + hello.setVersion (ProtocolVersion.TLS_1); // 2 + hello.setSessionId (sessionId); // +33 (1 + 32) + + random = hello.random (); // +32 + random.setGmtUnixTime (123456); + nonce = new byte [28]; + for (int i = 0; i < nonce.length; i++) + nonce[i] = (byte) i; + random.setRandomBytes (nonce); + + suites = hello.cipherSuites (); + suites.setSize (10); // + 22 (2 + 2*10) + suites.put (0, CipherSuite.TLS_NULL_WITH_NULL_NULL); + suites.put (1, CipherSuite.TLS_RSA_WITH_NULL_MD5); + suites.put (2, CipherSuite.TLS_RSA_WITH_NULL_SHA); + suites.put (3, CipherSuite.TLS_RSA_EXPORT_WITH_RC4_40_MD5); + suites.put (4, CipherSuite.TLS_RSA_WITH_RC4_128_MD5); + suites.put (5, CipherSuite.TLS_RSA_WITH_RC4_128_SHA); + suites.put (6, CipherSuite.TLS_RSA_EXPORT_WITH_DES40_CBC_SHA); + suites.put (7, CipherSuite.TLS_RSA_WITH_DES_CBC_SHA); + suites.put (8, CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA); + suites.put (9, CipherSuite.TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA); + + comps = hello.compressionMethods (); // + 3 (1 + 2*1) + comps.setSize (2); + comps.put (0, CompressionMethod.NULL); + comps.put (1, CompressionMethod.ZLIB); + + handshake = new Handshake(buffer); + hello = (ClientHello) handshake.body(); + if (hello.extensions() == null) + System.out.println("PASS: extensions() == null"); + else + System.out.println("FAIL: extensions() != null"); + + System.err.println(handshake); } } diff --git a/jessie-tests/testServerHello.java b/jessie-tests/testServerHello.java index 04471767c..fb6f0cbe1 100644 --- a/jessie-tests/testServerHello.java +++ b/jessie-tests/testServerHello.java @@ -1,6 +1,8 @@ import gnu.javax.net.ssl.provider.CipherSuite; import gnu.javax.net.ssl.provider.CompressionMethod; +import gnu.javax.net.ssl.provider.Extension; +import gnu.javax.net.ssl.provider.ExtensionList; import gnu.javax.net.ssl.provider.Handshake; import gnu.javax.net.ssl.provider.ProtocolVersion; import gnu.javax.net.ssl.provider.Random; @@ -48,7 +50,14 @@ class testServerHello hello.setSessionId (sessionId); hello.setCipherSuite (CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA); hello.setCompressionMethod (CompressionMethod.ZLIB); - hello.setExtensionsLength (0); + hello.setExtensionsLength (12); + ExtensionList exts = hello.extensions(); + // Max fragment length of 2^9-1 + exts.set (0, Extension.Type.MAX_FRAGMENT_LENGTH, 1); // 2 + 2 + 1 + exts.get (0).setValue (new byte[] { 1 }); + // Zero-length server name. + exts.set (1, Extension.Type.SERVER_NAME, 3); // 2 + 2 + 3 + exts.get(1).setValue(new byte[3]); handshake.setLength (hello.length ()); System.err.println (handshake); @@ -69,5 +78,58 @@ class testServerHello System.out.println ("PASS: compressionMethod"); else System.out.println ("FAIL: compressionMethod"); + + exts = hello.extensions(); + Extension e = exts.get(0); + if (e.type() == Extension.Type.MAX_FRAGMENT_LENGTH) + System.out.println ("PASS: extensions().get(0).type"); + else + System.out.println ("FAIL: extensions().get(0).type"); + if (Arrays.equals(e.valueBytes(), new byte[] { 1 })) + System.out.println ("PASS: extensions().get(0).value"); + else + System.out.println ("FAIL: extensions().get(0).value"); + + e = exts.get(1); + if (e.type() == Extension.Type.SERVER_NAME) + System.out.println ("PASS: extensions().get(1).type"); + else + System.out.println ("FAIL: extensions().get(1).type"); + if (Arrays.equals(e.valueBytes(), new byte[3])) + System.out.println ("PASS: extensions().get(1).value"); + else + System.out.println ("FAIL: extensions().get(1).value"); + + // Part 2: with no extensions. + buffer = ByteBuffer.allocate (74); + handshake = new Handshake (buffer); + + handshake.setType (Handshake.Type.SERVER_HELLO); + handshake.setLength (70); + + hello = (ServerHello) handshake.body (); + + hello.setVersion (ProtocolVersion.TLS_1); // 2 + random = hello.random (); + random.setGmtUnixTime (123456); + nonce = new byte[28]; + for (int i = 0; i < nonce.length; i++) + nonce[i] = (byte) i; + random.setRandomBytes (nonce); // + 32 + sessionId = new byte[32]; + for (int i = 0; i < sessionId.length; i++) + sessionId[i] = (byte) i; + hello.setSessionId (sessionId); // + 33 + hello.setCipherSuite (CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA); // + 2 + hello.setCompressionMethod (CompressionMethod.ZLIB); // + 1 + + handshake = new Handshake (buffer); + hello = (ServerHello) handshake.body(); + if (hello.extensions() == null) + System.out.println ("PASS: hello.extensions() == null"); + else + System.out.println ("FAIL: hello.extensions() != null"); + + System.err.println (handshake); } } |