package org.glite.slcs.pki.bouncycastle; import java.security.GeneralSecurityException; import javax.security.auth.x500.X500Principal; import junit.framework.TestCase; import org.bouncycastle.asn1.util.ASN1Dump; import org.bouncycastle.jce.X509Principal; public class X509PrincipalUtilTest extends TestCase { private X509PrincipalUtil x509PrincipalUtil_ = new X509PrincipalUtil(); public void testRDN() throws GeneralSecurityException { String dn = "CN=C+CN=A+CN=B,O=SWITCH,C=CH"; System.out.println("DN: " + dn); X509Principal expected = new X509Principal(dn); System.out.println("BC X509Principal: " + expected); System.out.println("BC ASN1: " + ASN1Dump.dumpAsString(expected)); X509Principal p = x509PrincipalUtil_.createX509Principal(dn); System.out.println("my X509Principal: " + p); System.out.println("my ASN1: " + ASN1Dump.dumpAsString(p)); assertEquals(expected, p); assertEquals(expected.getDERObject(), p.getDERObject()); } public void testEscapedPlus() throws GeneralSecurityException { String expected = "CN=Foo\\+Bar,O=SWITCH,C=CH"; X509Principal p = x509PrincipalUtil_.createX509Principal(expected); System.out.println("my X509Principal: " + p); System.out.println("my ASN1: " + ASN1Dump.dumpAsString(p)); assertEquals(expected, p.getName()); } public void testMixed() throws GeneralSecurityException { String dn = "DC=Hello\\; World!,CN=Foo\\+Bar,O=A+O=B+O=C,O=Test+OU=Java,C=CH"; X509Principal p = x509PrincipalUtil_.createX509Principal(dn); System.out.println("my X509Principal: " + p); System.out.println("my ASN1: " + ASN1Dump.dumpAsString(p)); assertEquals(dn, p.getName()); } public void testBouncyVsMy() throws GeneralSecurityException { String dn = "DC=A+DC=B+DC=E,DC=JUnitTest,CN=X+CN=Y+CN=Y+DC=Z+O=AU"; // String certificateSubject_ =" C=AU, ST=VIC, L=Mel\\,Bourne, // O=Mon\\+nash, OU=Ar\\+cher, // CN=SL\\+CS/emailAddress=xthnguyen@yahoo.com"; // String certificateSubject_= "C=AU, ST=VIC, L=Melbourne, O=Monash, // OU=Archer, CN=slcs/emailAddress=xthnguyen@yahoo.com"; X509Principal p = x509PrincipalUtil_.createX509Principal(dn); X509Principal bcp = new X509Principal(dn); assertEquals(bcp, p); System.out.println("BC ASN1: " + ASN1Dump.dumpAsString(bcp)); System.out.println("my ASN1: " + ASN1Dump.dumpAsString(p)); assertEquals(bcp.toASN1Object(), p.toASN1Object()); } public void testEscapeBackslash() throws GeneralSecurityException { String subject = "DC=demo,DC=mams,DC=slcs,O=MAMS,CN=Dummy\\+\\;\\=aghf"; System.out.println("Subject: " + subject); // String expected = // "DC=demo,DC=mams,DC=slcs,O=MAMS,CN=Dummy\\+\\;aghf="; X509Principal p = x509PrincipalUtil_.createX509Principal(subject); System.out.println("X509Principal: " + p.getName()); System.out.println(ASN1Dump.dumpAsString(p)); assertEquals(subject, new X500Principal(p.getName()).getName()); } public void testEscapeDoubleQuoute() throws GeneralSecurityException { String subject = "DC=demo,DC=mams,DC=slcs,O=MAMS,CN=\"Dummy+;aghf=\""; System.out.println("Subject: " + subject); String expected = "DC=demo,DC=mams,DC=slcs,O=MAMS,CN=Dummy\\+\\;aghf\\="; System.out.println("Expected: " + expected); X509Principal p = x509PrincipalUtil_.createX509Principal(subject); System.out.println("X509Principal: " + p.getName()); System.out.println(ASN1Dump.dumpAsString(p)); // convert to X500 X500Principal x500= new X500Principal(p.getName()); System.out.println("X500Principal(default): " + x500.getName()); System.out.println("X500Principal(CANONICAL): " + x500.getName(X500Principal.CANONICAL)); System.out.println("X500Principal(RFC1779): " + x500.getName(X500Principal.RFC1779)); System.out.println("X500Principal(RFC2253): " + x500.getName(X500Principal.RFC2253)); assertEquals(expected, x500.getName()); } public void testX500PrincipalVsX509PrincipalQuoted() { String subject = "DC=test+CN=\"Test=Equal\""; System.out.println("Subject: " + subject); X500Principal x500= new X500Principal(subject); System.out.println("X500Principal: " + x500.getName()); X509Principal x509= new X509Principal(subject); System.out.println("X509Principal: " + x509.getName()); assertEquals(x500.getName(), x509.getName()); } public void testX500PrincipalVsX509PrincipalEscaped() { String subject = "DC=test,CN=Test\\=Equal"; System.out.println("Subject: " + subject); X500Principal x500= new X500Principal(subject); System.out.println("X500Principal: " + x500.getName()); X509Principal x509= new X509Principal(subject); System.out.println("X509Principal: " + x509.getName()); assertEquals(x500.getName(), x509.getName()); } public void testX509PrincipalToX500Principal() { String subject = "DC=test,CN=Test\\=Equal"; System.out.println("Subject: " + subject); X509Principal x509= new X509Principal(subject); System.out.println("X509Principal: " + x509.getName()); X500Principal x500= new X500Principal(x509.getName()); System.out.println("X500Principal(X509Principal): " + x500.getName()); assertEquals(x500.getName(), x509.getName()); } public void testFailure() { String subject = "DC=CH,hello"; try { X509Principal p = x509PrincipalUtil_.createX509Principal(subject); fail("This should failed: " + p.getName()); } catch (GeneralSecurityException e) { System.out.println("Expected exception: " + e); } } public void testSWITCHDN() throws GeneralSecurityException { String subject= "DC=ch+DC=switch+DC=slcs,O=Switch - Teleinformatikdienste fuer Lehre und Forschung,CN=Valery Tschopp\\+9FEE5EE3"; X509Principal p = x509PrincipalUtil_.createX509Principal(subject); System.out.println(p.getName()); System.out.println(ASN1Dump.dumpAsString(p)); } protected void setUp() throws Exception { super.setUp(); } }