}
} else if (StringUtils.isNotEmpty(certProfile.getQCSemanticsId())) {
si = new SemanticsInformation(new DERObjectIdentifier(certProfile.getQCSemanticsId()));
}
final ArrayList<QCStatement> qcs = new ArrayList<QCStatement>();
QCStatement qc = null;
// First the standard rfc3739 QCStatement with an optional SematicsInformation
DERObjectIdentifier pkixQcSyntax = RFC3739QCObjectIdentifiers.id_qcs_pkixQCSyntax_v1;
if (certProfile.getUsePkixQCSyntaxV2()) {
pkixQcSyntax = RFC3739QCObjectIdentifiers.id_qcs_pkixQCSyntax_v2;
}
if ( (si != null) ) {
qc = new QCStatement(pkixQcSyntax, si);
qcs.add(qc);
} else {
qc = new QCStatement(pkixQcSyntax);
qcs.add(qc);
}
// ETSI Statement that the certificate is a Qualified Certificate
if (certProfile.getUseQCEtsiQCCompliance()) {
qc = new QCStatement(ETSIQCObjectIdentifiers.id_etsi_qcs_QcCompliance);
qcs.add(qc);
}
// ETSI Statement regarding limit on the value of transactions
// Both value and currency must be available for this extension
if (certProfile.getUseQCEtsiValueLimit() &&
(certProfile.getQCEtsiValueLimit() >= 0) && (certProfile.getQCEtsiValueLimitCurrency() != null) ) {
final int limit = certProfile.getQCEtsiValueLimit();
// The exponent should be default 0
final int exponent = certProfile.getQCEtsiValueLimitExp();
final MonetaryValue value = new MonetaryValue(new Iso4217CurrencyCode(certProfile.getQCEtsiValueLimitCurrency()), limit, exponent);
qc = new QCStatement(ETSIQCObjectIdentifiers.id_etsi_qcs_LimiteValue, value);
qcs.add(qc);
}
if (certProfile.getUseQCEtsiRetentionPeriod()) {
final DERInteger years = new DERInteger( ((Integer) certProfile.getQCEtsiRetentionPeriod()) );
qc = new QCStatement(ETSIQCObjectIdentifiers.id_etsi_qcs_RetentionPeriod, years);
qcs.add(qc);
}
// ETSI Statement claiming that the private key resides in a Signature Creation Device
if (certProfile.getUseQCEtsiSignatureDevice()) {
qc = new QCStatement(ETSIQCObjectIdentifiers.id_etsi_qcs_QcSSCD);
qcs.add(qc);
}
// Custom UTF8String QC-statement:
// qcStatement-YourCustom QC-STATEMENT ::= { SYNTAX YourCustomUTF8String
// IDENTIFIED BY youroid }
// -- This statement gives you the possibility to define your own QC-statement
// -- using an OID and a simple UTF8String, with describing text. A sample text could for example be:
// -- This certificate, according to Act. No. xxxx Electronic Signature Law is a qualified electronic certificate
//
// YourCustomUTF8String ::= UTF8String
if (certProfile.getUseQCCustomString() &&
!StringUtils.isEmpty(certProfile.getQCCustomStringOid()) && !StringUtils.isEmpty(certProfile.getQCCustomStringText())) {
final DERUTF8String str = new DERUTF8String(certProfile.getQCCustomStringText());
final DERObjectIdentifier oid = new DERObjectIdentifier(certProfile.getQCCustomStringOid());
qc = new QCStatement(oid, str);
qcs.add(qc);
}
if (!qcs.isEmpty()) {
final ASN1EncodableVector vec = new ASN1EncodableVector();
final Iterator<QCStatement> iter = qcs.iterator();
while (iter.hasNext()) {
final QCStatement q = (QCStatement)iter.next();
vec.add(q);
}
ret = new DERSequence(vec);
}
if (ret == null) {