package at.gv.egovernment.moa.spss.server.invoke; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import iaik.server.modules.cmsverify.CMSSignatureVerificationResult; import iaik.server.modules.cmsverify.CertificateValidationResult; import at.gv.egovernment.moa.spss.MOAApplicationException; import at.gv.egovernment.moa.spss.api.SPSSFactory; import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponse; import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponseElement; import at.gv.egovernment.moa.spss.api.common.CheckResult; import at.gv.egovernment.moa.spss.api.common.SignerInfo; /** * A class to build a <code>VerifyCMSSignatureResponse</code> object. * * <p>Via subsequent calls to <code>addResult()</code> a number of results from * a CMS signature verification can be added to the response.</p> * * <p>The <code>getResponseElement()</code> method then returns the * <code>VerifyCMSSignatureResponse</code> built so far.</p> * * @author Patrick Peck * @version $Id$ */ public class VerifyCMSSignatureResponseBuilder { /** The <code>SPSSFactory</code> for creating API objects. */ private SPSSFactory factory = SPSSFactory.getInstance(); /** The elements making up the response. */ private List responseElements = new ArrayList(); /** * Get the <code>VerifyCMSSignatureResponse</code> built so far. * * @return The <code>VerifyCMSSignatureResponse</code> built so far. */ public VerifyCMSSignatureResponse getResponse() { return factory.createVerifyCMSSignatureResponse(responseElements); } /** * Add a verification result to the response. * * @param result The result to add. * @throws MOAApplicationException An error occurred adding the result. */ public void addResult(CMSSignatureVerificationResult result) throws MOAApplicationException { CertificateValidationResult certResult = result.getCertificateValidationResult(); int signatureCheckCode = result.getSignatureValueVerificationCode().intValue(); int certificateCheckCode = certResult.getValidationResultCode().intValue(); VerifyCMSSignatureResponseElement responseElement; SignerInfo signerInfo; CheckResult signatureCheck; CheckResult certificateCheck; // add SignerInfo element signerInfo = factory.createSignerInfo( (X509Certificate) certResult.getCertificateChain().get(0), certResult.isQualifiedCertificate(), certResult.isPublicAuthorityCertificate(), certResult.getPublicAuthorityID()); // add SignatureCheck element signatureCheck = factory.createCheckResult(signatureCheckCode, null); // add CertificateCheck element certificateCheck = factory.createCheckResult(certificateCheckCode, null); // build the response element responseElement = factory.createVerifyCMSSignatureResponseElement( signerInfo, signatureCheck, certificateCheck); responseElements.add(responseElement); } }