/* See LICENSE for licensing and NOTICE for copyright. */ package org.ldaptive.asn1; import java.nio.ByteBuffer; import org.ldaptive.LdapUtils; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** * Unit test for {@link DN}. * * @author Middleware Services */ public class DNTest { /** * DN test data. * * @return test data * * @throws Exception On test failure. */ // CheckStyle:MethodLength OFF @DataProvider(name = "dns") public Object[][] createData() throws Exception { return new Object[][] { // CN=www.ldaptive.org, DC=vt, DC=edu // BER 30:4A:31:19:30:17:06:03:55:04:03:13:10:77:77:77:2E:6C:64:61:70:74 // 69:76:65:2E:6F:72:67:31:18:30:16:06:0A:09:92:26:89:93:F2:2C:64:01 // 19:16:08:6C:64:61:70:74:69:76:65:31:13:30:11:06:0A:09:92:26:89:93 // F2:2C:64:01:19:16:03:6F:72:67: new Object[] { new byte[] { (byte) 0x30, (byte) 0x4A, (byte) 0x31, (byte) 0x19, (byte) 0x30, (byte) 0x17, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x03, (byte) 0x13, (byte) 0x10, (byte) 0x77, (byte) 0x77, (byte) 0x77, (byte) 0x2E, (byte) 0x6C, (byte) 0x64, (byte) 0x61, (byte) 0x70, (byte) 0x74, (byte) 0x69, (byte) 0x76, (byte) 0x65, (byte) 0x2E, (byte) 0x6F, (byte) 0x72, (byte) 0x67, (byte) 0x31, (byte) 0x18, (byte) 0x30, (byte) 0x16, (byte) 0x06, (byte) 0x0A, (byte) 0x09, (byte) 0x92, (byte) 0x26, (byte) 0x89, (byte) 0x93, (byte) 0xF2, (byte) 0x2C, (byte) 0x64, (byte) 0x01, (byte) 0x19, (byte) 0x16, (byte) 0x08, (byte) 0x6C, (byte) 0x64, (byte) 0x61, (byte) 0x70, (byte) 0x74, (byte) 0x69, (byte) 0x76, (byte) 0x65, (byte) 0x31, (byte) 0x13, (byte) 0x30, (byte) 0x11, (byte) 0x06, (byte) 0x0A, (byte) 0x09, (byte) 0x92, (byte) 0x26, (byte) 0x89, (byte) 0x93, (byte) 0xF2, (byte) 0x2C, (byte) 0x64, (byte) 0x01, (byte) 0x19, (byte) 0x16, (byte) 0x03, (byte) 0x6F, (byte) 0x72, (byte) 0x67, }, new DN( new RDN( new AttributeValueAssertion( "2.5.4.3", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "www.ldaptive.org".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "0.9.2342.19200300.100.1.25", new AttributeValueAssertion.Value(UniversalDERTag.IA5STR, "ldaptive".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "0.9.2342.19200300.100.1.25", new AttributeValueAssertion.Value(UniversalDERTag.IA5STR, "org".getBytes("UTF-8"))))), }, // DC=org, DC=ldaptive, UID=7 + CN=www.ldaptive.org // BER 30:5B:31:2A:30:0F:06:0A:09:92:26:89:93:F2:2C:64:01:01:13:01:37:30 // 17:06:03:55:04:03:13:10:77:77:77:2E:6C:64:61:70:74:69:76:65:2E:6F // 72:67:31:18:30:16:06:0A:09:92:26:89:93:F2:2C:64:01:19:16:08:6C:64 // 61:70:74:69:76:65:31:13:30:11:06:0A:09:92:26:89:93:F2:2C:64:01:19 // 16:03:6F:72:67: new Object[] { new byte[] { (byte) 0x30, (byte) 0x5B, (byte) 0x31, (byte) 0x2A, (byte) 0x30, (byte) 0x0F, (byte) 0x06, (byte) 0x0A, (byte) 0x09, (byte) 0x92, (byte) 0x26, (byte) 0x89, (byte) 0x93, (byte) 0xF2, (byte) 0x2C, (byte) 0x64, (byte) 0x01, (byte) 0x01, (byte) 0x13, (byte) 0x01, (byte) 0x37, (byte) 0x30, (byte) 0x17, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x03, (byte) 0x13, (byte) 0x10, (byte) 0x77, (byte) 0x77, (byte) 0x77, (byte) 0x2E, (byte) 0x6C, (byte) 0x64, (byte) 0x61, (byte) 0x70, (byte) 0x74, (byte) 0x69, (byte) 0x76, (byte) 0x65, (byte) 0x2E, (byte) 0x6F, (byte) 0x72, (byte) 0x67, (byte) 0x31, (byte) 0x18, (byte) 0x30, (byte) 0x16, (byte) 0x06, (byte) 0x0A, (byte) 0x09, (byte) 0x92, (byte) 0x26, (byte) 0x89, (byte) 0x93, (byte) 0xF2, (byte) 0x2C, (byte) 0x64, (byte) 0x01, (byte) 0x19, (byte) 0x16, (byte) 0x08, (byte) 0x6C, (byte) 0x64, (byte) 0x61, (byte) 0x70, (byte) 0x74, (byte) 0x69, (byte) 0x76, (byte) 0x65, (byte) 0x31, (byte) 0x13, (byte) 0x30, (byte) 0x11, (byte) 0x06, (byte) 0x0A, (byte) 0x09, (byte) 0x92, (byte) 0x26, (byte) 0x89, (byte) 0x93, (byte) 0xF2, (byte) 0x2C, (byte) 0x64, (byte) 0x01, (byte) 0x19, (byte) 0x16, (byte) 0x03, (byte) 0x6F, (byte) 0x72, (byte) 0x67, }, new DN( new RDN( new AttributeValueAssertion( "0.9.2342.19200300.100.1.1", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "7".getBytes("UTF-8"))), new AttributeValueAssertion( "2.5.4.3", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "www.ldaptive.org".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "0.9.2342.19200300.100.1.25", new AttributeValueAssertion.Value(UniversalDERTag.IA5STR, "ldaptive".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "0.9.2342.19200300.100.1.25", new AttributeValueAssertion.Value(UniversalDERTag.IA5STR, "org".getBytes("UTF-8"))))), }, // O="CN=www.apache.org, foo", CN=www.example.org // BER 30:3B:31:18:30:16:06:03:55:04:03:13:0F:77:77:77:2E:65:78:61:6D:70 // 6C:65:2E:6F:72:67:31:1F:30:1D:06:03:55:04:0A:13:16:43:4E:3D:77:77 // 77:2E:61:70:61:63:68:65:2E:6F:72:67:2C:20:66:6F:6F: new Object[] { new byte[]{ (byte) 0x30, (byte) 0x3B, (byte) 0x31, (byte) 0x18, (byte) 0x30, (byte) 0x16, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x03, (byte) 0x13, (byte) 0x0F, (byte) 0x77, (byte) 0x77, (byte) 0x77, (byte) 0x2E, (byte) 0x65, (byte) 0x78, (byte) 0x61, (byte) 0x6D, (byte) 0x70, (byte) 0x6C, (byte) 0x65, (byte) 0x2E, (byte) 0x6F, (byte) 0x72, (byte) 0x67, (byte) 0x31, (byte) 0x1F, (byte) 0x30, (byte) 0x1D, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x0A, (byte) 0x13, (byte) 0x16, (byte) 0x43, (byte) 0x4E, (byte) 0x3D, (byte) 0x77, (byte) 0x77, (byte) 0x77, (byte) 0x2E, (byte) 0x61, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x68, (byte) 0x65, (byte) 0x2E, (byte) 0x6F, (byte) 0x72, (byte) 0x67, (byte) 0x2C, (byte) 0x20, (byte) 0x66, (byte) 0x6F, (byte) 0x6F, }, new DN( new RDN( new AttributeValueAssertion( "2.5.4.3", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "www.example.org".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.10", new AttributeValueAssertion.Value( UniversalDERTag.PRINTSTR, "CN=www.apache.org, foo".getBytes("UTF-8"))))), }, // O="foo, CN=www.apache.org,", CN=www.example.org // BER 30:3C:31:18:30:16:06:03:55:04:03:13:0F:77:77:77:2E:65:78:61:6D:70 // 6C:65:2E:6F:72:67:31:20:30:1E:06:03:55:04:0A:13:17:66:6F:6F:2C:20 // 43:4E:3D:77:77:77:2E:61:70:61:63:68:65:2E:6F:72:67:2C: new Object[] { new byte[]{ (byte) 0x30, (byte) 0x3C, (byte) 0x31, (byte) 0x18, (byte) 0x30, (byte) 0x16, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x03, (byte) 0x13, (byte) 0x0F, (byte) 0x77, (byte) 0x77, (byte) 0x77, (byte) 0x2E, (byte) 0x65, (byte) 0x78, (byte) 0x61, (byte) 0x6D, (byte) 0x70, (byte) 0x6C, (byte) 0x65, (byte) 0x2E, (byte) 0x6F, (byte) 0x72, (byte) 0x67, (byte) 0x31, (byte) 0x20, (byte) 0x30, (byte) 0x1E, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x0A, (byte) 0x13, (byte) 0x17, (byte) 0x66, (byte) 0x6F, (byte) 0x6F, (byte) 0x2C, (byte) 0x20, (byte) 0x43, (byte) 0x4E, (byte) 0x3D, (byte) 0x77, (byte) 0x77, (byte) 0x77, (byte) 0x2E, (byte) 0x61, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x68, (byte) 0x65, (byte) 0x2E, (byte) 0x6F, (byte) 0x72, (byte) 0x67, (byte) 0x2C, }, new DN( new RDN( new AttributeValueAssertion( "2.5.4.3", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "www.example.org".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.10", new AttributeValueAssertion.Value( UniversalDERTag.PRINTSTR, "foo, CN=www.apache.org,".getBytes("UTF-8"))))), }, // CN=login.live.com, OU=Passport, O=Microsoft Corporation, // STREET=One Microsoft Way, L=Redmond, ST=Washington, // OID.2.5.4.17=98052, C=US, SERIALNUMBER=600413485, // OID.2.5.4.15="V1.0, Clause 5.(b)", // OID.1.3.6.1.4.1.311.60.2.1.2=Washington, // OID.1.3.6.1.4.1.311.60.2.1.3=US // BER 30:84:00:00:01:0F:31:13:30:11:06:0B:2B:06:01:04:01:82:37:3C:02:01 // 03:13:02:55:53:31:1B:30:19:06:0B:2B:06:01:04:01:82:37:3C:02:01:02 // 13:0A:57:61:73:68:69:6E:67:74:6F:6E:31:1B:30:19:06:03:55:04:0F:13 // 12:56:31:2E:30:2C:20:43:6C:61:75:73:65:20:35:2E:28:62:29:31:12:30 // 10:06:03:55:04:05:13:09:36:30:30:34:31:33:34:38:35:31:0B:30:09:06 // 03:55:04:06:13:02:55:53:31:0E:30:0C:06:03:55:04:11:14:05:39:38:30 // 35:32:31:13:30:11:06:03:55:04:08:13:0A:57:61:73:68:69:6E:67:74:6F // 6E:31:10:30:0E:06:03:55:04:07:14:07:52:65:64:6D:6F:6E:64:31:1A:30 // 18:06:03:55:04:09:14:11:4F:6E:65:20:4D:69:63:72:6F:73:6F:66:74:20 // 57:61:79:31:1E:30:1C:06:03:55:04:0A:14:15:4D:69:63:72:6F:73:6F:66 // 74:20:43:6F:72:70:6F:72:61:74:69:6F:6E:31:11:30:0F:06:03:55:04:0B // 14:08:50:61:73:73:70:6F:72:74:31:17:30:15:06:03:55:04:03:14:0E:6C // 6F:67:69:6E:2E:6C:69:76:65:2E:63:6F:6D: new Object[] { LdapUtils.base64Decode( "MIQAAAEPMRMwEQYLKwYBBAGCNzwCAQMTAlVTMRswGQYLKwYBBAGCNzwCAQITCldh" + "c2hpbmd0b24xGzAZBgNVBA8TElYxLjAsIENsYXVzZSA1LihiKTESMBAGA1UEBRMJ" + "NjAwNDEzNDg1MQswCQYDVQQGEwJVUzEOMAwGA1UEERQFOTgwNTIxEzARBgNVBAgT" + "Cldhc2hpbmd0b24xEDAOBgNVBAcUB1JlZG1vbmQxGjAYBgNVBAkUEU9uZSBNaWNy" + "b3NvZnQgV2F5MR4wHAYDVQQKFBVNaWNyb3NvZnQgQ29ycG9yYXRpb24xETAPBgNV" + "BAsUCFBhc3Nwb3J0MRcwFQYDVQQDFA5sb2dpbi5saXZlLmNvbQ=="), new DN( new RDN( new AttributeValueAssertion( "1.3.6.1.4.1.311.60.2.1.3", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "US".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "1.3.6.1.4.1.311.60.2.1.2", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "Washington".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.15", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "V1.0, Clause 5.(b)".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.5", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "600413485".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.6", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "US".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.17", new AttributeValueAssertion.Value(UniversalDERTag.T61STR, "98052".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.8", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "Washington".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.7", new AttributeValueAssertion.Value(UniversalDERTag.T61STR, "Redmond".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.9", new AttributeValueAssertion.Value(UniversalDERTag.T61STR, "One Microsoft Way".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.10", new AttributeValueAssertion.Value(UniversalDERTag.T61STR, "Microsoft Corporation".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.11", new AttributeValueAssertion.Value(UniversalDERTag.T61STR, "Passport".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.3", new AttributeValueAssertion.Value(UniversalDERTag.T61STR, "login.live.com".getBytes("UTF-8"))))), }, // C=US, DC=edu, DC=vt, ST=Virginia, L=Blacksburg, // O=Virginia Polytechnic Institute and State University, // OU=Middleware-Client, OU=SETI, SERIALNUMBER=1248110657961, // CN=glider.cc.vt.edu // BER 30:84:00:00:00:FA:31:19:30:17:06:03:55:04:03:0C:10:67:6C:69:64:65 // 72:2E:63:63:2E:76:74:2E:65:64:75:31:16:30:14:06:03:55:04:05:13:0D // 31:32:34:38:31:31:30:36:35:37:39:36:31:31:0D:30:0B:06:03:55:04:0B // 0C:04:53:45:54:49:31:1A:30:18:06:03:55:04:0B:0C:11:4D:69:64:64:6C // 65:77:61:72:65:2D:43:6C:69:65:6E:74:31:3C:30:3A:06:03:55:04:0A:0C // 33:56:69:72:67:69:6E:69:61:20:50:6F:6C:79:74:65:63:68:6E:69:63:20 // 49:6E:73:74:69:74:75:74:65:20:61:6E:64:20:53:74:61:74:65:20:55:6E // 69:76:65:72:73:69:74:79:31:13:30:11:06:03:55:04:07:0C:0A:42:6C:61 // 63:6B:73:62:75:72:67:31:11:30:0F:06:03:55:04:08:0C:08:56:69:72:67 // 69:6E:69:61:31:12:30:10:06:0A:09:92:26:89:93:F2:2C:64:01:19:16:02 // 76:74:31:13:30:11:06:0A:09:92:26:89:93:F2:2C:64:01:19:16:03:65:64 // 75:31:0B:30:09:06:03:55:04:06:13:02:55:53: new Object[] { LdapUtils.base64Decode( "MIQAAAD6MRkwFwYDVQQDDBBnbGlkZXIuY2MudnQuZWR1MRYwFAYDVQQFEw0xMjQ4" + "MTEwNjU3OTYxMQ0wCwYDVQQLDARTRVRJMRowGAYDVQQLDBFNaWRkbGV3YXJlLUNs" + "aWVudDE8MDoGA1UECgwzVmlyZ2luaWEgUG9seXRlY2huaWMgSW5zdGl0dXRlIGFu" + "ZCBTdGF0ZSBVbml2ZXJzaXR5MRMwEQYDVQQHDApCbGFja3NidXJnMREwDwYDVQQI" + "DAhWaXJnaW5pYTESMBAGCgmSJomT8ixkARkWAnZ0MRMwEQYKCZImiZPyLGQBGRYD" + "ZWR1MQswCQYDVQQGEwJVUw=="), new DN( new RDN( new AttributeValueAssertion( "2.5.4.3", new AttributeValueAssertion.Value(UniversalDERTag.UTF8STR, "glider.cc.vt.edu".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.5", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "1248110657961".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.11", new AttributeValueAssertion.Value(UniversalDERTag.UTF8STR, "SETI".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.11", new AttributeValueAssertion.Value(UniversalDERTag.UTF8STR, "Middleware-Client".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.10", new AttributeValueAssertion.Value( UniversalDERTag.UTF8STR, "Virginia Polytechnic Institute and State University".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.7", new AttributeValueAssertion.Value(UniversalDERTag.UTF8STR, "Blacksburg".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.8", new AttributeValueAssertion.Value(UniversalDERTag.UTF8STR, "Virginia".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "0.9.2342.19200300.100.1.25", new AttributeValueAssertion.Value(UniversalDERTag.IA5STR, "vt".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "0.9.2342.19200300.100.1.25", new AttributeValueAssertion.Value(UniversalDERTag.IA5STR, "edu".getBytes("UTF-8")))), new RDN( new AttributeValueAssertion( "2.5.4.6", new AttributeValueAssertion.Value(UniversalDERTag.PRINTSTR, "US".getBytes("UTF-8"))))), }, }; } // CheckStyle:MethodLength ON /** * @param bytes to decode. * @param expected to compare. * * @throws Exception On test failure. */ @Test(groups = {"asn1"}, dataProvider = "dns") public void decode(final byte[] bytes, final DN expected) throws Exception { Assert.assertEquals(DN.decode(ByteBuffer.wrap(bytes)), expected); } /** * @param expected bytes to compare. * @param sequence to encode. * * @throws Exception On test failure. */ @Test(groups = {"asn1"}, dataProvider = "dns") public void encode(final byte[] expected, final DN sequence) throws Exception { Assert.assertEquals(sequence.encode(), expected); } }