Skip to content

Commit 02b97f7

Browse files
committed
Added aliases for dnQualifier, relates to github #1622.
1 parent 2442937 commit 02b97f7

3 files changed

Lines changed: 43 additions & 0 deletions

File tree

core/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,8 @@ public class BCStyle
278278
DefaultLookUp.put("unstructuredname", UnstructuredName);
279279
DefaultLookUp.put("uniqueidentifier", UNIQUE_IDENTIFIER);
280280
DefaultLookUp.put("dn", DN_QUALIFIER);
281+
DefaultLookUp.put("dnq", DN_QUALIFIER);
282+
DefaultLookUp.put("dnqualifier", DN_QUALIFIER);
281283
DefaultLookUp.put("pseudonym", PSEUDONYM);
282284
DefaultLookUp.put("postaladdress", POSTAL_ADDRESS);
283285
DefaultLookUp.put("nameatbirth", NAME_AT_BIRTH);

core/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ public class RFC4519Style
122122
DefaultLookUp.put("destinationindicator", destinationIndicator);
123123
DefaultLookUp.put("distinguishedname", distinguishedName);
124124
DefaultLookUp.put("dnqualifier", dnQualifier);
125+
DefaultLookUp.put("dn", dnQualifier);
126+
DefaultLookUp.put("dnq", dnQualifier);
125127
DefaultLookUp.put("enhancedsearchguide", enhancedSearchGuide);
126128
DefaultLookUp.put("facsimiletelephonenumber", facsimileTelephoneNumber);
127129
DefaultLookUp.put("generationqualifier", generationQualifier);

core/src/test/java/org/bouncycastle/asn1/test/X500NameTest.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.bouncycastle.asn1.x500.style.BCStrictStyle;
2424
import org.bouncycastle.asn1.x500.style.BCStyle;
2525
import org.bouncycastle.asn1.x500.style.IETFUtils;
26+
import org.bouncycastle.asn1.x500.style.RFC4519Style;
2627
import org.bouncycastle.asn1.x509.X509DefaultEntryConverter;
2728
import org.bouncycastle.util.encoders.Hex;
2829
import org.bouncycastle.util.test.SimpleTest;
@@ -150,6 +151,7 @@ public void performTest()
150151
{
151152
ietfUtilsTest();
152153
bogusEqualsTest();
154+
dnQualifierAliasParseTest();
153155

154156
testEncodingPrintableString(BCStyle.C, "AU");
155157
testEncodingPrintableString(BCStyle.SERIALNUMBER, "123456");
@@ -682,6 +684,43 @@ private void ietfUtilsTest()
682684
IETFUtils.valueToString(new DERUTF8String(" "));
683685
}
684686

687+
/**
688+
* BCStyle / RFC4519Style now accept "DN", "DNQ" and "dnQualifier"
689+
* as parser aliases for the dnQualifier attribute (OID 2.5.4.46).
690+
* The motivating case was that {@code java.security.cert.X509Certificate.getSubjectX500Principal().toString()}
691+
* emits "DNQ=" on some JDKs (Amazon Corretto 17 observed) and
692+
* "DNQUALIFIER=" on others, neither of which round-tripped through
693+
* {@code new X500Name(principal.toString())} under BCStyle's
694+
* historical "DN" form (issue #1622).
695+
*/
696+
private void dnQualifierAliasParseTest()
697+
throws Exception
698+
{
699+
String[] aliases = new String[]{ "DN", "DNQ", "dnQualifier", "dn", "dnq", "dnqualifier" };
700+
for (int i = 0; i != aliases.length; ++i)
701+
{
702+
String alias = aliases[i];
703+
704+
X500Name viaBcStyle = new X500Name(BCStyle.INSTANCE,
705+
"CN=Foo," + alias + "=ABC123");
706+
RDN[] rdnsBc = viaBcStyle.getRDNs(BCStyle.DN_QUALIFIER);
707+
if (rdnsBc.length != 1)
708+
{
709+
fail("BCStyle: alias '" + alias
710+
+ "' did not parse to a single dnQualifier RDN");
711+
}
712+
713+
X500Name viaRfc = new X500Name(RFC4519Style.INSTANCE,
714+
"CN=Foo," + alias + "=ABC123");
715+
RDN[] rdnsRfc = viaRfc.getRDNs(RFC4519Style.dnQualifier);
716+
if (rdnsRfc.length != 1)
717+
{
718+
fail("RFC4519Style: alias '" + alias
719+
+ "' did not parse to a single dnQualifier RDN");
720+
}
721+
}
722+
}
723+
685724
private void bogusEqualsTest()
686725
throws Exception
687726
{

0 commit comments

Comments
 (0)