package test.at.gv.egovernment.moa.spss.server.config; import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; import java.security.cert.CertificateException; import org.junit.runners.MethodSorters; import org.junit.FixMethodOrder; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; import at.gv.egovernment.moa.spss.server.config.ConfigurationProvider; import iaik.asn1.ObjectID; import iaik.asn1.structures.Name; import iaik.utils.RFC2253NameParser; import iaik.utils.RFC2253NameParserException; import iaik.x509.X509Certificate; @RunWith(BlockJUnit4ClassRunner.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class X500NormalisationTest { private static final String RESULT = "C=AT,O=Swisscom IT Services Finance S.E.,organizationIdentifier=VATAT-U64741248,OU=Digital Certificate Services,CN=Swisscom Diamant EU CA 4.1"; @Test public void aaa_withCertificate() throws CertificateException, IOException, RFC2253NameParserException { X509Certificate eeCert = new X509Certificate( X500NormalisationTest.class.getResourceAsStream("/data/ee.crt")); String normalizedName = ConfigurationProvider.normalizeX500Names(((Name)eeCert.getIssuerDN()).getRFC2253String()); assertEquals(RESULT, normalizedName); } @Test public void aaa_withString() throws CertificateException, IOException, RFC2253NameParserException { String normalizedName = ConfigurationProvider.normalizeX500Names(RESULT); assertEquals(RESULT, normalizedName); } @Ignore @Test public void aaa_withStringSecond() throws CertificateException, IOException, RFC2253NameParserException { String normalizedName = ConfigurationProvider.normalizeX500Names( "organizationIdentifier=VATAT-U64741248,OU=Digital Certificate Services,CN=Swisscom Diamant EU CA 4.1,O=Swisscom IT Services Finance S.E.,C=AT"); assertEquals(RESULT, normalizedName); } @Test public void bbb_withCertificateDetailedImpl() throws CertificateException, IOException, RFC2253NameParserException { X509Certificate eeCert = new X509Certificate( X500NormalisationTest.class.getResourceAsStream("/data/ee.crt")); RFC2253NameParser.register( "organizationIdentifier", new ObjectID("2.5.4.97", "organizationIdentifier", (String) null, false)); final RFC2253NameParser parser = new RFC2253NameParser(((Name)eeCert.getIssuerDN()).getRFC2253String()); final Name name = parser.parse(); String normalizedName = name.getRFC2253String(); assertEquals(RESULT, normalizedName); } @Test public void bbb_withString() throws CertificateException, IOException, RFC2253NameParserException { RFC2253NameParser.register( "organizationIdentifier", new ObjectID("2.5.4.97", "organizationIdentifier", (String) null, false)); final RFC2253NameParser parser = new RFC2253NameParser(RESULT); final Name name = parser.parse(); String normalizedName = name.getRFC2253String(); assertEquals(RESULT, normalizedName); name.getRFC2253String(true); name.getRFC2253String(false); } @Test public void bbb_withStringSecond() throws CertificateException, IOException, RFC2253NameParserException { RFC2253NameParser.register( "organizationIdentifier", new ObjectID("2.5.4.97", "organizationIdentifier", (String) null, false)); final RFC2253NameParser parser = new RFC2253NameParser( "C=AT,O=Swisscom IT Services Finance S.E.,organizationIdentifier=VATAT-U64741248,OU=Digital Certificate Services,CN=Swisscom Diamant EU CA 4.1"); final Name name = parser.parse(); String normalizedName = name.getRFC2253String(); assertEquals(RESULT, normalizedName); } /* * Ignored, because 'ORG_ID' from original Cert is not valid. * Reason: underline '_' is not an allowed attributeType (see Section 3 https://www.rfc-editor.org/rfc/rfc2253.html) * - attributeType = (ALPHA 1*keychar) / oid * - keychar = ALPHA / DIGIT / "-" */ @Ignore @Test public void ccc_withStringSecond() throws CertificateException, IOException, RFC2253NameParserException { RFC2253NameParser.register( "ORG-ID", new ObjectID("2.5.4.97", "organizationIdentifier", (String) null, false)); final RFC2253NameParser parser = new RFC2253NameParser( "ORG-ID=VATAT-U64741248,OU=Digital Certificate Services,CN=Swisscom Diamant EU CA 4.1,O=Swisscom IT Services Finance S.E.,C=AT"); final Name name = parser.parse(); String normalizedName = name.getRFC2253String(); assertEquals(RESULT, normalizedName); } }