1347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom/* 2347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * Copyright (C) 2011 The Android Open Source Project 3347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * 4347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License"); 5347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * you may not use this file except in compliance with the License. 6347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * You may obtain a copy of the License at 7347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * 8347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * http://www.apache.org/licenses/LICENSE-2.0 9347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * 10347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * Unless required by applicable law or agreed to in writing, software 11347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS, 12347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * See the License for the specific language governing permissions and 14347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom * limitations under the License. 15347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom */ 16347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom 17347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrompackage libcore.javax.security.auth.x500; 18347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom 19dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstromimport java.io.ByteArrayInputStream; 20dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstromimport java.security.cert.CertificateFactory; 21dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstromimport java.security.cert.X509Certificate; 226fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstromimport java.util.Arrays; 23dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstromimport javax.security.auth.x500.X500Principal; 24347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstromimport junit.framework.TestCase; 25d430cc782689a7f6a256ef6b0ebfc7210b0c31d9Tobias Thiererimport libcore.libcore.util.SerializationTester; 26347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom 27491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanianimport dalvik.system.VMRuntime; 28491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanianimport sun.security.jca.Providers; 29491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian 306fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom 31347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrompublic class X500PrincipalTest extends TestCase { 32347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom 33491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian // Allow access to deprecated BC algorithms in this test, so we can ensure they 34491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian // continue to work 35491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian @Override 36491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian public void setUp() throws Exception { 37491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian super.setUp(); 38491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian Providers.setMaximumAllowableApiLevelForBcDeprecation( 39491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian VMRuntime.getRuntime().getTargetSdkVersion()); 40491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian } 41491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian 42491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian @Override 43491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian public void tearDown() throws Exception { 44491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian Providers.setMaximumAllowableApiLevelForBcDeprecation( 45491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian Providers.DEFAULT_MAXIMUM_ALLOWABLE_TARGET_API_LEVEL_FOR_BC_DEPRECATION); 46491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian super.tearDown(); 47491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian } 48491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian 49347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom public void testSerialization() { 50347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom String expected = "aced0005737200266a617661782e73656375726974792e617574682e7" 51347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom + "83530302e583530305072696e636970616cf90dff3c88b877c703000078707572" 52347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom + "00025b42acf317f8060854e002000078700000006a30683117301506035504031" 53347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom + "30e7777772e676f6f676c652e636f6d31133011060355040a130a476f6f676c65" 54347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom + "20496e63311630140603550407130d4d6f756e7461696e2056696577311330110" 55347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom + "603550408130a43616c69666f726e6961310b300906035504061302555378"; 56347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom X500Principal actual = new X500Principal("C=US, " 57347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom + "ST=California, " 58347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom + "L=Mountain View, " 59347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom + "O=Google Inc, " 60347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom + "CN=www.google.com"); 61b416ef5dc224630af2b9393a15ae120b27e4864aJesse Wilson new SerializationTester<X500Principal>(actual, expected).test(); 62347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom } 63dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom 64dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom /** 65dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom * ASN1-encoded trusted certificate #946059622 for 66dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom * Entrust.net. This certificate uses the T61String (aka 67dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom * TeletexString or TELETEXSTRING) encoding for one 68dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom * organizationalUnitNames: 69dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom * 70dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom * "www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)" 71dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom */ 72dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom private static final byte[] T61STRING_CERT = new byte[] { 48, -126, 4, 92, 48, -126, 3, 68, -96, 3, 2, 1, 2, 2, 4, 56, 99, -71, 102, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 5, 5, 0, 48, -127, -76, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 69, 110, 116, 114, 117, 115, 116, 46, 110, 101, 116, 49, 64, 48, 62, 6, 3, 85, 4, 11, 20, 55, 119, 119, 119, 46, 101, 110, 116, 114, 117, 115, 116, 46, 110, 101, 116, 47, 67, 80, 83, 95, 50, 48, 52, 56, 32, 105, 110, 99, 111, 114, 112, 46, 32, 98, 121, 32, 114, 101, 102, 46, 32, 40, 108, 105, 109, 105, 116, 115, 32, 108, 105, 97, 98, 46, 41, 49, 37, 48, 35, 6, 3, 85, 4, 11, 19, 28, 40, 99, 41, 32, 49, 57, 57, 57, 32, 69, 110, 116, 114, 117, 115, 116, 46, 110, 101, 116, 32, 76, 105, 109, 105, 116, 101, 100, 49, 51, 48, 49, 6, 3, 85, 4, 3, 19, 42, 69, 110, 116, 114, 117, 115, 116, 46, 110, 101, 116, 32, 67, 101, 114, 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, 32, 65, 117, 116, 104, 111, 114, 105, 116, 121, 32, 40, 50, 48, 52, 56, 41, 48, 30, 23, 13, 57, 57, 49, 50, 50, 52, 49, 55, 53, 48, 53, 49, 90, 23, 13, 49, 57, 49, 50, 50, 52, 49, 56, 50, 48, 53, 49, 90, 48, -127, -76, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 69, 110, 116, 114, 117, 115, 116, 46, 110, 101, 116, 49, 64, 48, 62, 6, 3, 85, 4, 11, 20, 55, 119, 119, 119, 46, 101, 110, 116, 114, 117, 115, 116, 46, 110, 101, 116, 47, 67, 80, 83, 95, 50, 48, 52, 56, 32, 105, 110, 99, 111, 114, 112, 46, 32, 98, 121, 32, 114, 101, 102, 46, 32, 40, 108, 105, 109, 105, 116, 115, 32, 108, 105, 97, 98, 46, 41, 49, 37, 48, 35, 6, 3, 85, 4, 11, 19, 28, 40, 99, 41, 32, 49, 57, 57, 57, 32, 69, 110, 116, 114, 117, 115, 116, 46, 110, 101, 116, 32, 76, 105, 109, 105, 116, 101, 100, 49, 51, 48, 49, 6, 3, 85, 4, 3, 19, 42, 69, 110, 116, 114, 117, 115, 116, 46, 110, 101, 116, 32, 67, 101, 114, 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, 32, 65, 117, 116, 104, 111, 114, 105, 116, 121, 32, 40, 50, 48, 52, 56, 41, 48, -126, 1, 34, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 1, 5, 0, 3, -126, 1, 15, 0, 48, -126, 1, 10, 2, -126, 1, 1, 0, -83, 77, 75, -87, 18, -122, -78, -22, -93, 32, 7, 21, 22, 100, 42, 43, 75, -47, -65, 11, 74, 77, -114, -19, -128, 118, -91, 103, -73, 120, 64, -64, 115, 66, -56, 104, -64, -37, 83, 43, -35, 94, -72, 118, -104, 53, -109, -117, 26, -99, 124, 19, 58, 14, 31, 91, -73, 30, -49, -27, 36, 20, 30, -79, -127, -87, -115, 125, -72, -52, 107, 75, 3, -15, 2, 12, -36, -85, -91, 64, 36, 0, 127, 116, -108, -95, -99, 8, 41, -77, -120, 11, -11, -121, 119, -99, 85, -51, -28, -61, 126, -41, 106, 100, -85, -123, 20, -122, -107, 91, -105, 50, 80, 111, 61, -56, -70, 102, 12, -29, -4, -67, -72, 73, -63, 118, -119, 73, 25, -3, -64, -88, -67, -119, -93, 103, 47, -58, -97, -68, 113, 25, 96, -72, 45, -23, 44, -55, -112, 118, 102, 123, -108, -30, -81, 120, -42, 101, 83, 93, 60, -42, -100, -78, -49, 41, 3, -7, 47, -92, 80, -78, -44, 72, -50, 5, 50, 85, -118, -3, -78, 100, 76, 14, -28, -104, 7, 117, -37, 127, -33, -71, 8, 85, 96, -123, 48, 41, -7, 123, 72, -92, 105, -122, -29, 53, 63, 30, -122, 93, 122, 122, 21, -67, -17, 0, -114, 21, 34, 84, 23, 0, -112, 38, -109, -68, 14, 73, 104, -111, -65, -8, 71, -45, -99, -107, 66, -63, 14, 77, -33, 111, 38, -49, -61, 24, 33, 98, 102, 67, 112, -42, -43, -64, 7, -31, 2, 3, 1, 0, 1, -93, 116, 48, 114, 48, 17, 6, 9, 96, -122, 72, 1, -122, -8, 66, 1, 1, 4, 4, 3, 2, 0, 7, 48, 31, 6, 3, 85, 29, 35, 4, 24, 48, 22, -128, 20, 85, -28, -127, -47, 17, -128, -66, -40, -119, -71, 8, -93, 49, -7, -95, 36, 9, 22, -71, 112, 48, 29, 6, 3, 85, 29, 14, 4, 22, 4, 20, 85, -28, -127, -47, 17, -128, -66, -40, -119, -71, 8, -93, 49, -7, -95, 36, 9, 22, -71, 112, 48, 29, 6, 9, 42, -122, 72, -122, -10, 125, 7, 65, 0, 4, 16, 48, 14, 27, 8, 86, 53, 46, 48, 58, 52, 46, 48, 3, 2, 4, -112, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 5, 5, 0, 3, -126, 1, 1, 0, 89, 71, -84, 33, -124, -118, 23, -55, -100, -119, 83, 30, -70, -128, -123, 26, -58, 60, 78, 62, -79, -100, -74, 124, -58, -110, 93, 24, 100, 2, -29, -45, 6, 8, 17, 97, 124, 99, -29, 43, -99, 49, 3, 112, 118, -46, -93, 40, -96, -12, -69, -102, 99, 115, -19, 109, -27, 42, -37, -19, 20, -87, 43, -58, 54, 17, -48, 43, -21, 7, -117, -91, -38, -98, 92, 25, -99, 86, 18, -11, 84, 41, -56, 5, -19, -78, 18, 42, -115, -12, 3, 27, -1, -25, -110, 16, -121, -80, 58, -75, -61, -99, 5, 55, 18, -93, -57, -12, 21, -71, -43, -92, 57, 22, -101, 83, 58, 35, -111, -15, -88, -126, -94, 106, -120, 104, -63, 121, 2, 34, -68, -86, -90, -42, -82, -33, -80, 20, 95, -72, -121, -48, -35, 124, 127, 123, -1, -81, 28, -49, -26, -37, 7, -83, 94, -37, -123, -99, -48, 43, 13, 51, -37, 4, -47, -26, 73, 64, 19, 43, 118, -5, 62, -23, -100, -119, 15, 21, -50, 24, -80, -123, 120, 33, 79, 107, 79, 14, -6, 54, 103, -51, 7, -14, -1, 8, -48, -30, -34, -39, -65, 42, -81, -72, -121, -122, 33, 60, 4, -54, -73, -108, 104, 127, -49, 60, -23, -104, -41, 56, -1, -20, -64, -39, 80, -16, 46, 75, 88, -82, 70, 111, -48, 46, -61, 96, -38, 114, 85, 114, -67, 76, 69, -98, 97, -70, -65, -124, -127, -110, 3, -47, -46, 105, 124, -59 }; 73dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom 74dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom /** 75dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom * Confirm DRLCertFactory uses a non-hex format for T61String encoding: http://b/2102191 76dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom */ 77dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom public void testGetName() throws Exception { 78dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom CertificateFactory certFactBC = CertificateFactory.getInstance("X.509", "BC"); 7988f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root CertificateFactory certFactOpenSSL = CertificateFactory.getInstance("X.509", 8088f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root "AndroidOpenSSL"); 81dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom 82dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom X509Certificate certBC = (X509Certificate) 83dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom certFactBC.generateCertificate(new ByteArrayInputStream(T61STRING_CERT)); 8488f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root X509Certificate certOpenSSL = (X509Certificate) 8588f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root certFactOpenSSL.generateCertificate(new ByteArrayInputStream(T61STRING_CERT)); 86dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom 8788f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root assertEquals(certBC, certOpenSSL); 88dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom 89dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom assertEquals(certBC.getSubjectX500Principal(), certBC.getSubjectX500Principal()); 9088f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root assertEquals(certOpenSSL.getIssuerX500Principal(), certOpenSSL.getIssuerX500Principal()); 91dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom 9288f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root assertEquals(certBC.getSubjectX500Principal(), certOpenSSL.getSubjectX500Principal()); 9388f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root assertEquals(certBC.getIssuerX500Principal(), certOpenSSL.getIssuerX500Principal()); 94dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom 95dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom String[] formats = { 96dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom X500Principal.CANONICAL, 97dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom X500Principal.RFC1779, 98dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom X500Principal.RFC2253 99dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom }; 100dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom for (String format : formats) { 101dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom assertEquals(certBC.getSubjectX500Principal().getName(format), 10288f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root certOpenSSL.getSubjectX500Principal().getName(format)); 103dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom assertEquals(certBC.getIssuerX500Principal().getName(format), 10488f0e15c54d5469fb55cb67c8a2b0cceaed34074Kenny Root certOpenSSL.getIssuerX500Principal().getName(format)); 105dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom } 106dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom String expected = "" 107dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom + "cn=entrust.net certification authority (2048)," 108dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom + "ou=(c) 1999 entrust.net limited," 109dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom + "ou=www.entrust.net/cps_2048 incorp. by ref. (limits liab.)," 110dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom + "o=entrust.net"; 111dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom assertEquals(expected, 112dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom certBC.getSubjectX500Principal().getName(X500Principal.CANONICAL)); 113dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom 114dafb4e6e50f8b1cad8299a267eac8992010a6927Brian Carlstrom } 1156fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom 1166fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom // http://code.google.com/p/android/issues/detail?id=21531 1176fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom // http://b/5580664 1186fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom public void testIA5StringEncodings() { 1196fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom testIA5StringEncoding("emailAddress=root@android.com", 1206fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom new byte[] { 48, 33, 49, 31, 48, 29, 6, 9, 42, -122, 72, -122, -9, 13, 1, 9, 1, 22, 16, 114, 111, 111, 116, 64, 97, 110, 100, 114, 111, 105, 100, 46, 99, 111, 109 }); 1216fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom testIA5StringEncoding("dc=com", 1226fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom new byte[] { 48, 21, 49, 19, 48, 17, 6, 10, 9, -110, 38, -119, -109, -14, 44, 100, 1, 25, 22, 3, 99, 111, 109 }); 1236fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom } 1246fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom 125f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro public void testExceptionsForWrongDNs() { 126f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("cn=\\n"); 127f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("cn=a;b"); 128f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("cn= #a"); 129f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("l=a,cn=+p"); 130f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("l=+a,cn=p"); 131f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("\nl=q\n,cn=p"); 132f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("\tl=q,cn=p"); 133f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("<=q,cn=p"); 134f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("l=q\n,,cn=p"); 135f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("l=q\n+,cn=p"); 136f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("+l=q,cn=p"); 137f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor(",l=q,cn=p"); 138f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("l"); 139f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro expectExceptionInDNConstructor("l=\\g0"); 140f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro } 141f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro 142e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro public void testNegativeLen() { 143e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro try { 144e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro X500Principal p = new X500Principal(new byte[]{ 145e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro 0x30, // DerValue.tag_Sequence read in DerValue#getSequence 146e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro 9, // Length of the vector. read in readVector. 147e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro // DerInputStream.getLength will just return this as 10 & 0x80 == 0 148e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro -1, // Tag of the first value in the sequencevalue. Convenient so that it 149e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro // doesn't hold DerIndefLenConverter.isEOC() 150e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro (byte) 0x80, // Encoding in indefinite form 151e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro -1, // Second tag to be read by DerIndefLenConverter 152e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro (byte) 0x84, // Second length byte to be read, 0x80 means long form, 4 bytes 153e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro (byte) 0xff, // Length to be read by DerIndefLenConverter, -6, will move the 154e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro // buffer position to the second tag 155e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro (byte) 0xff, 156e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro (byte) 0xff, 157e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro (byte) -6, 158e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro 0, // Needed as otherwise it's detected that there's nothing after 159e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro // the length 160e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro }); 161e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro fail("expected IllegalArgumentException"); 162e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro } catch (IllegalArgumentException expected) { 163e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro } 164e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro } 165e27611b2c8a2c8cb413ff2f5f0c9cbae288aa835Sergio Giro 166f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro private void expectExceptionInDNConstructor(String dn) { 167f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro try { 168f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro X500Principal principal = new X500Principal(dn); 169f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro fail("Expected " + IllegalArgumentException.class.getName() 170f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro + " because of incorrect input name"); 171f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro } catch (IllegalArgumentException e) { 172f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro // Expected. 173f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro } 174f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro } 175f7ce6a3b235a9aaf884d3b96e50d6b249dd770e0Sergio Giro 1766fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom private void testIA5StringEncoding(String name, byte[] expectedEncoded) { 1776fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom X500Principal original = new X500Principal(name); 1786fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom 1796fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom byte[] actualEncoded = original.getEncoded(); 1806fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom assertEquals(Arrays.toString(expectedEncoded), Arrays.toString(actualEncoded)); 1816fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom 1826fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom X500Principal decoded = new X500Principal(actualEncoded); 1836fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom assertEquals(original, decoded); 1846fa695ae2ba9c2d22146c48f16d12a0d3bbdc728Brian Carlstrom } 185347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom} 186