package eu.europa.esig.dss.validation.process.qmatrix.qualification.checks.qualified; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; import javax.xml.bind.DatatypeConverter; import org.junit.Test; import eu.europa.esig.dss.CertificatePolicyOids; import eu.europa.esig.dss.QCStatementOids; import eu.europa.esig.dss.jaxb.diagnostic.XmlCertificate; import eu.europa.esig.dss.jaxb.diagnostic.XmlOID; import eu.europa.esig.dss.utils.Utils; import eu.europa.esig.dss.validation.reports.wrapper.CertificateWrapper; public class QualifiedTest { private static final String UNKNOWN_OID = "0.0.0"; public final static Date PRE_EIDAS_DATE = DatatypeConverter.parseDateTime("2015-07-01T00:00:00.000Z").getTime(); public final static Date POST_EIDAS_DATE = DatatypeConverter.parseDateTime("2016-07-01T00:00:00.000Z").getTime(); // --------------------- PRE EIDAS @Test public void testPreNoQcStatementNoCertPolicy() { CertificateWrapper signingCertificate = createPreEIDAS(Collections.<String> emptyList(), Collections.<String> emptyList()); notQC(signingCertificate); } @Test public void testPreQcCompliant() { CertificateWrapper signingCertificate = createPreEIDAS(Arrays.asList(QCStatementOids.QC_COMPLIANT.getOid()), Collections.<String> emptyList()); qc(signingCertificate); } @Test public void testPreUnknownQcCompliant() { CertificateWrapper signingCertificate = createPreEIDAS(Arrays.asList(UNKNOWN_OID), Collections.<String> emptyList()); notQC(signingCertificate); } @Test public void testPreQCP() { CertificateWrapper signingCertificate = createPreEIDAS(Collections.<String> emptyList(), Arrays.asList(CertificatePolicyOids.QCP_PUBLIC.getOid())); qc(signingCertificate); } @Test public void testPreQCPPlus() { CertificateWrapper signingCertificate = createPreEIDAS(Collections.<String> emptyList(), Arrays.asList(CertificatePolicyOids.QCP_PUBLIC_WITH_SSCD.getOid())); qc(signingCertificate); } @Test public void testPreUnknownCertPolicy() { CertificateWrapper signingCertificate = createPreEIDAS(Collections.<String> emptyList(), Arrays.asList(UNKNOWN_OID)); notQC(signingCertificate); } @Test public void testPreQcTypeEsigOnly() { CertificateWrapper signingCertificate = createPreEIDAS(Collections.<String> emptyList(), Collections.<String> emptyList(), Arrays.asList(QCStatementOids.QTC_ESIGN.getOid())); notQC(signingCertificate); } // --------------------- POST EIDAS @Test public void testPostNoQcStatementNoCertPolicy() { CertificateWrapper signingCertificate = createPostEIDAS(Collections.<String> emptyList(), Collections.<String> emptyList()); notQC(signingCertificate); } @Test public void testPostQcCompliant() { CertificateWrapper signingCertificate = createPostEIDAS(Arrays.asList(QCStatementOids.QC_COMPLIANT.getOid()), Collections.<String> emptyList()); qc(signingCertificate); } @Test public void testPostUnknownQcCompliant() { CertificateWrapper signingCertificate = createPostEIDAS(Arrays.asList(UNKNOWN_OID), Collections.<String> emptyList()); notQC(signingCertificate); } @Test public void testPostQCP() { CertificateWrapper signingCertificate = createPostEIDAS(Collections.<String> emptyList(), Arrays.asList(CertificatePolicyOids.QCP_PUBLIC.getOid())); notQC(signingCertificate); // QcCompliant is missing } @Test public void testPostQcCompliantQCP() { CertificateWrapper signingCertificate = createPostEIDAS(Arrays.asList(QCStatementOids.QC_COMPLIANT.getOid()), Arrays.asList(CertificatePolicyOids.QCP_PUBLIC.getOid())); qc(signingCertificate); } @Test public void testPostQCPPlus() { CertificateWrapper signingCertificate = createPostEIDAS(Collections.<String> emptyList(), Arrays.asList(CertificatePolicyOids.QCP_PUBLIC_WITH_SSCD.getOid())); notQC(signingCertificate); // QcCompliant is missing } @Test public void testPostQcCompliantQCPPlus() { CertificateWrapper signingCertificate = createPostEIDAS(Arrays.asList(QCStatementOids.QC_COMPLIANT.getOid()), Arrays.asList(CertificatePolicyOids.QCP_PUBLIC_WITH_SSCD.getOid())); qc(signingCertificate); } @Test public void testPostQcTypeEsigOnly() { CertificateWrapper signingCertificate = createPostEIDAS(Collections.<String> emptyList(), Collections.<String> emptyList(), Arrays.asList(QCStatementOids.QTC_ESIGN.getOid())); notQC(signingCertificate); } @Test public void testPostQcCompliantQcTypeEsig() { CertificateWrapper signingCertificate = createPostEIDAS(Arrays.asList(QCStatementOids.QC_COMPLIANT.getOid()), Collections.<String> emptyList(), Arrays.asList(QCStatementOids.QTC_ESIGN.getOid())); qc(signingCertificate); } @Test public void testPostQcCompliantQcTypeEseals() { CertificateWrapper signingCertificate = createPostEIDAS(Arrays.asList(QCStatementOids.QC_COMPLIANT.getOid()), Collections.<String> emptyList(), Arrays.asList(QCStatementOids.QTC_ESEAL.getOid())); qc(signingCertificate); } private CertificateWrapper createPreEIDAS(List<String> qcStatementIds, List<String> certificatePolicyIds) { return createPreEIDAS(qcStatementIds, certificatePolicyIds, Collections.<String> emptyList()); } private CertificateWrapper createPreEIDAS(List<String> qcStatementIds, List<String> certificatePolicyIds, List<String> qcTypeIds) { XmlCertificate xmlCert = new XmlCertificate(); xmlCert.setNotBefore(PRE_EIDAS_DATE); xmlCert.setQCStatementIds(toOids(qcStatementIds)); xmlCert.setCertificatePolicyIds(toOids(certificatePolicyIds)); xmlCert.setQCTypes(toOids(qcTypeIds)); return new CertificateWrapper(xmlCert); } private CertificateWrapper createPostEIDAS(List<String> qcStatementIds, List<String> certificatePolicyIds) { return createPostEIDAS(qcStatementIds, certificatePolicyIds, Collections.<String> emptyList()); } private CertificateWrapper createPostEIDAS(List<String> qcStatementIds, List<String> certificatePolicyIds, List<String> qcTypeIds) { XmlCertificate xmlCert = new XmlCertificate(); xmlCert.setNotBefore(POST_EIDAS_DATE); xmlCert.setQCStatementIds(toOids(qcStatementIds)); xmlCert.setCertificatePolicyIds(toOids(certificatePolicyIds)); xmlCert.setQCTypes(toOids(qcTypeIds)); return new CertificateWrapper(xmlCert); } private List<XmlOID> toOids(List<String> oids) { List<XmlOID> result = new ArrayList<XmlOID>(); if (Utils.isCollectionNotEmpty(oids)) { for (String oid : oids) { XmlOID xmlOid = new XmlOID(); xmlOid.setValue(oid); result.add(xmlOid); } } return result; } private void notQC(CertificateWrapper signingCertificate) { QualificationStrategy strategy = QualificationStrategyFactory.createQualificationFromCert(signingCertificate); assertFalse(QualifiedStatus.isQC(strategy.getQualifiedStatus())); } private void qc(CertificateWrapper signingCertificate) { QualificationStrategy strategy = QualificationStrategyFactory.createQualificationFromCert(signingCertificate); assertTrue(QualifiedStatus.isQC(strategy.getQualifiedStatus())); } }