aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas <>2023-01-12 15:23:34 +0100
committerThomas <>2023-01-12 15:25:44 +0100
commit596818361623dbe537536683146c3df2a2fcdbb2 (patch)
treeaad215536448225dae7e88777f70076300e7f771
parentc14096c5a87dabcc7483c5ff7bcd7014ee3a0319 (diff)
downloadpdf-as-4-596818361623dbe537536683146c3df2a2fcdbb2.tar.gz
pdf-as-4-596818361623dbe537536683146c3df2a2fcdbb2.tar.bz2
pdf-as-4-596818361623dbe537536683146c3df2a2fcdbb2.zip
fix(sigblock): add mapping to support old RFC2255 names in signature-profile configurations
Issue: #70 Add a mapping table into DNUtils to map specific RDN names to old format
-rw-r--r--pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/DNUtils.java49
-rw-r--r--pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/CertificateAndRequestParameterResolverTest.java8
2 files changed, 30 insertions, 27 deletions
diff --git a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/DNUtils.java b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/DNUtils.java
index 2ac91490..810a5d8a 100644
--- a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/DNUtils.java
+++ b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/DNUtils.java
@@ -3,19 +3,19 @@
* PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
* joint initiative of the Federal Chancellery Austria and Graz University of
* Technology.
- *
+ *
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
* the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
* http://www.osor.eu/eupl/
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
- *
+ *
* This product combines work with different licenses. See the "NOTICE" text
* file for details on the various modules and licenses.
* The "NOTICE" text file is part of the distribution. Any derivative works
@@ -23,6 +23,7 @@
******************************************************************************/
package at.gv.egiz.pdfas.common.utils;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -31,30 +32,36 @@ import javax.naming.InvalidNameException;
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
public class DNUtils {
- private static final Logger logger = LoggerFactory.getLogger(DNUtils.class);
-
+ private static final Map<String, String> RFC2255_NAME_MAPPER = Collections.unmodifiableMap(
+ new HashMap<String, String>() {
+ private static final long serialVersionUID = 3434415954591076154L;
+ {
+ put("title", "T");
+ }
+ });
- public static Map<String, String> dnToMap(String dn) throws InvalidNameException {
- Map<String, String> map = new HashMap<String, String>();
+ public static Map<String, String> dnToMap(String dn) throws InvalidNameException {
+ final Map<String, String> map = new HashMap<>();
- LdapName ldapName = new LdapName(dn);
+ final LdapName ldapName = new LdapName(dn);
- Iterator<Rdn> rdnIterator = ldapName.getRdns().iterator();
+ final Iterator<Rdn> rdnIterator = ldapName.getRdns().iterator();
- while(rdnIterator.hasNext()) {
- Rdn rdn = rdnIterator.next();
+ while (rdnIterator.hasNext()) {
+ final Rdn rdn = rdnIterator.next();
+ map.put(rdn.getType(), rdn.getValue().toString());
- //logger.debug(rdn.getType() + " = " + rdn.getValue().toString());
- map.put(rdn.getType(), rdn.getValue().toString());
- }
+ // map specific RFC2255 names to support old PDF-AS signature-profile definitions
+ if (RFC2255_NAME_MAPPER.containsKey(rdn.getType())) {
+ map.put(RFC2255_NAME_MAPPER.get(rdn.getType()), rdn.getValue().toString());
- map.put("DN", dn);
- //logger.debug("DN = " + dn);
-
- return map;
+ }
+
}
+
+ map.put("DN", dn);
+
+ return map;
+ }
}
diff --git a/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/CertificateAndRequestParameterResolverTest.java b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/CertificateAndRequestParameterResolverTest.java
index 68222881..805f87b9 100644
--- a/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/CertificateAndRequestParameterResolverTest.java
+++ b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/CertificateAndRequestParameterResolverTest.java
@@ -12,19 +12,15 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import com.google.gson.annotations.SerializedName;
-
-import at.gv.egiz.pdfas.common.settings.DefaultSignatureProfileSettings;
import at.gv.egiz.pdfas.common.settings.ISettings;
import at.gv.egiz.pdfas.common.settings.SignatureProfileSettings;
import at.gv.egiz.pdfas.lib.api.sign.SignParameter;
import at.gv.egiz.pdfas.lib.impl.SignParameterImpl;
-import at.gv.egiz.pdfas.lib.impl.stamping.CertificateAndRequestParameterResolver;
import at.gv.egiz.pdfas.lib.impl.stamping.ValueResolver;
import at.gv.egiz.pdfas.lib.impl.status.ICertificateProvider;
import at.gv.egiz.pdfas.lib.impl.status.OperationStatus;
import iaik.x509.X509Certificate;
-
+
@RunWith(JUnit4.class)
public class CertificateAndRequestParameterResolverTest {
@@ -50,7 +46,7 @@ public class CertificateAndRequestParameterResolverTest {
String result = resolver.resolve("",
"${subject.T != null ? (subject.T + \" \") : \"\"}${subject.CN}",
sigProfileSetting);
- assertEquals("wrong signer Name", "Hermann Peyerl", result);
+ assertEquals("wrong signer Name", "A.Univ.Prof.DDr. Hermann Peyerl", result);
}