1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.xnet.provider.jsse; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayInputStream; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.CertificateEncodingException; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.CertificateException; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.CertificateFactory; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.X509Certificate; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests for <code>CertificateMessage</code> constructor and methods 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class CertificateMessageTest extends TestCase { 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath private static String base64certEncoding = "-----BEGIN CERTIFICATE-----\n" 368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a" 378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF" 388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE" 398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD" 408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAYGBFUdIAAwZwYDVR0RAQH/B" 418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG" 428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY" 438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG" 448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "CCsGAQUFBwMBBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB" 458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw" 468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE" 478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h" 488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd" 498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1" 508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwGByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP" 518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n" 528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "-----END CERTIFICATE-----\n"; 538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /* 558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * Test for CertificateMessage(null) and 568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * CertificateMessage(HandshakeIODataStream, int) 578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void testCertificateMessage1() throws Exception { 598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath CertificateMessage message = new CertificateMessage(null); 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect type", Handshake.CERTIFICATE, message.getType()); 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect message", 3, message.length()); 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect message", 0, message.certs.length); 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath HandshakeIODataStream out = new HandshakeIODataStream(); 668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath message.send(out); 678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath byte[] encoded = out.getData(1000); 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect out data length", message.length(), encoded.length); 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath HandshakeIODataStream in = new HandshakeIODataStream(); 718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath in.append(encoded); 728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath CertificateMessage message_2 = new CertificateMessage(in, message.length()); 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect message_2", 3, message_2.length()); 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect message_2", 0, message_2.certs.length); 768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /* 798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * Test for void CertificateMessage(X509Certificate[]), 808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * CertificateMessage(HandshakeIODataStream, int) 818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void testCertificateMessage2() throws Exception { 838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath CertificateFactory certFactory = CertificateFactory.getInstance("X509"); 848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath ByteArrayInputStream bais = new ByteArrayInputStream(base64certEncoding 868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath .getBytes("UTF-8")); 878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath X509Certificate cert = (X509Certificate) certFactory.generateCertificate(bais); 888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath CertificateMessage message = new CertificateMessage( 898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath new X509Certificate[] { cert }); 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect type", Handshake.CERTIFICATE, message.getType()); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("incorrect cert encoding", Arrays.equals(message.certs[0] 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getEncoded(), cert.getEncoded())); 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath HandshakeIODataStream out = new HandshakeIODataStream(); 968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath message.send(out); 978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath byte[] encoded = out.getData(1000); 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect out data length", message.length(), encoded.length); 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath HandshakeIODataStream in = new HandshakeIODataStream(); 1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath in.append(encoded); 1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath CertificateMessage message_2 = new CertificateMessage(in, message.length()); 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Incorrect message decoding", message.certs.length, message_2.certs.length); 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("incorrect cert encoding", Arrays.equals(message.certs[0] 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getEncoded(), message_2.certs[0].getEncoded())); 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath in.append(encoded); 1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath try { 1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath message_2 = new CertificateMessage(in, message.length() - 1); 1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath fail("Small length: No expected AlertException"); 1118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (AlertException e) { 1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath in.append(encoded); 1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath in.append(new byte[] { 1, 2, 3 }); 1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath try { 1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath message_2 = new CertificateMessage(in, message.length() + 3); 1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath fail("Extra bytes: No expected AlertException "); 1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (AlertException e) { 1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 124