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.CertificateException; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.CertificateFactory; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.X509Certificate; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.x500.X500Principal; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>CertificateRequest</code> constructors and methods 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class CertificateRequestTest extends TestCase { 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String base64certEncoding = "-----BEGIN CERTIFICATE-----\n" 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a" 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF" 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE" 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD" 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAYGBFUdIAAwZwYDVR0RAQH/B" 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG" 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY" 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG" 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "CCsGAQUFBwMBBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB" 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw" 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE" 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h" 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd" 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1" 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwGByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP" 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n" 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "-----END CERTIFICATE-----\n"; 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic void testCertificateRequest() throws Exception { 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory certFactory = CertificateFactory.getInstance("X509"); 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(base64certEncoding 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getBytes("UTF-8")); 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes X509Certificate cert = (X509Certificate) certFactory.generateCertificate(bais); 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes X509Certificate[] accepted = {cert}; 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes X500Principal[] certificate_authorities = {cert.getIssuerX500Principal()}; 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] certificate_types = new byte[] { CertificateRequest.RSA_SIGN, 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateRequest.RSA_FIXED_DH }; 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateRequest message = new CertificateRequest(certificate_types, 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes accepted); 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect type", Handshake.CERTIFICATE_REQUEST, message 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getType()); 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("incorrect CertificateRequest", Arrays.equals( 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes message.certificate_types, certificate_types)); 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("incorrect CertificateRequest", Arrays.equals( 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes message.certificate_authorities, certificate_authorities)); 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HandshakeIODataStream out = new HandshakeIODataStream(); 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes message.send(out); 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] encoded = out.getData(1000); 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("incorrect out data length", message.length(), encoded.length); 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HandshakeIODataStream in = new HandshakeIODataStream(); 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.append(encoded); 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateRequest message_2 = new CertificateRequest(in, message.length()); 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("incorrect message decoding", 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Arrays.equals(message.certificate_types, message_2.certificate_types)); 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("incorrect message decoding", 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Arrays.equals(message.certificate_authorities, message_2.certificate_authorities)); 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.append(encoded); 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes message_2 = new CertificateRequest(in, message.length() - 1); 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Small length: No expected AlertException"); 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (AlertException e) { 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.append(encoded); 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.append(new byte[] { 1, 2, 3 }); 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes message_2 = new CertificateRequest(in, message.length() + 3); 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Extra bytes: No expected AlertException "); 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (AlertException e) { 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 105