/*
* DSS - Digital Signature Services
*
* Copyright (C) 2013 European Commission, Directorate-General Internal Market and Services (DG MARKT), B-1049 Bruxelles/Brussel
*
* Developed by: 2013 ARHS Developments S.A. (rue Nicolas Bové 2B, L-1253 Luxembourg) http://www.arhs-developments.com
*
* This file is part of the "DSS - Digital Signature Services" project.
*
* "DSS - Digital Signature Services" is free software: you can redistribute it and/or modify it under the terms of
* the GNU Lesser General Public License as published by the Free Software Foundation, either version 2.1 of the
* License, or (at your option) any later version.
*
* DSS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* "DSS - Digital Signature Services". If not, see <http://www.gnu.org/licenses/>.
*/
package eu.europa.ec.markt.dss.validation102853;
public class SignatureQualification {
private static final int QCP = 1;
private static final int QCPP = 1;
private static final int QCC = 1;
private static final int QCSSCD = 1;
private static final int CAQC = 1;
private static final int QCWithSSCD = 1;
private static final int QCCNoSSCD = 1;
private static final int QCSSCDAsInCert = 1;
private static final int QCForLegalPerson = 1;
private static final int Q1 = 1;
private static final int Q2 = 2;
private static final int Q3 = 3;
private static final int[][][][] QCPs = new int[2][2][2][2];
private static final int[][][][][] TLs = new int[2][2][2][2][2];
private static final SignatureType[][] SIG = new SignatureType[3][3];
static {
QCPs[QCP][0][0][0] = Q1;
QCPs[QCP][0][QCC][0] = Q1;
QCPs[0][0][QCC][0] = Q1;
QCPs[0][0][QCC][QCSSCD] = Q2;
QCPs[QCP][0][QCC][QCSSCD] = Q2;
QCPs[0][QCPP][0][0] = Q2;
QCPs[0][QCPP][QCC][0] = Q2;
QCPs[0][QCPP][QCC][QCSSCD] = Q2;
QCPs[0][0][0][QCSSCD] = Q3;
TLs[CAQC][0][0][0][0] = Q1;
TLs[CAQC][0][0][QCSSCDAsInCert][0] = Q1;
TLs[CAQC][0][0][0][QCForLegalPerson] = Q1;
TLs[CAQC][QCWithSSCD][0][0][0] = Q2;
TLs[CAQC][0][QCCNoSSCD][0][0] = Q3;
SIG[0][0] = SignatureType.AdESqc;
SIG[0][1] = SignatureType.QES;
SIG[0][2] = SignatureType.AdESqc;
SIG[1][0] = SignatureType.QES;
SIG[1][1] = SignatureType.QES;
SIG[1][2] = SignatureType.AdESqc;
// SIG[Q3][Q1] = SignatureType.AdES;
// SIG[Q3][Q2] = SignatureType.AdES;
// SIG[Q3][Q3] = SignatureType.AdES;
}
static public SignatureType getSignatureType(CertificateQualification certQualif, TLQualification tlQualif) {
int q1 = QCPs[certQualif.qcp][certQualif.qcpp][certQualif.qcc][certQualif.qcsscd];
if (q1 == 0) {
q1 = Q3;
}
int q2 = TLs[tlQualif.caqc][tlQualif.qcWithSSCD][tlQualif.qcCNoSSCD][tlQualif.qcSSCDAsInCert][tlQualif.qcForLegalPerson];
if (q2 == 0) {
q2 = Q1;
}
SignatureType signatureType = SIG[q1 - 1][q2 - 1];
if (signatureType == null) {
signatureType = SignatureType.AdES;
}
return signatureType;
}
}