|
23 | 23 | import org.bouncycastle.asn1.x500.style.BCStrictStyle; |
24 | 24 | import org.bouncycastle.asn1.x500.style.BCStyle; |
25 | 25 | import org.bouncycastle.asn1.x500.style.IETFUtils; |
| 26 | +import org.bouncycastle.asn1.x500.style.RFC4519Style; |
26 | 27 | import org.bouncycastle.asn1.x509.X509DefaultEntryConverter; |
27 | 28 | import org.bouncycastle.util.encoders.Hex; |
28 | 29 | import org.bouncycastle.util.test.SimpleTest; |
@@ -150,6 +151,7 @@ public void performTest() |
150 | 151 | { |
151 | 152 | ietfUtilsTest(); |
152 | 153 | bogusEqualsTest(); |
| 154 | + dnQualifierAliasParseTest(); |
153 | 155 |
|
154 | 156 | testEncodingPrintableString(BCStyle.C, "AU"); |
155 | 157 | testEncodingPrintableString(BCStyle.SERIALNUMBER, "123456"); |
@@ -682,6 +684,43 @@ private void ietfUtilsTest() |
682 | 684 | IETFUtils.valueToString(new DERUTF8String(" ")); |
683 | 685 | } |
684 | 686 |
|
| 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 | + |
685 | 724 | private void bogusEqualsTest() |
686 | 725 | throws Exception |
687 | 726 | { |
|
0 commit comments