package es.uji.security.crypto.jxades;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import net.java.xades.security.xml.SignatureStatus;
import net.java.xades.security.xml.ValidateResult;
import net.java.xades.security.xml.XAdES.XAdES;
import net.java.xades.security.xml.XAdES.XAdES_BES;
import net.java.xades.security.xml.XAdES.XMLAdvancedSignature;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
import es.uji.security.crypto.VerificationResult;
public class JXAdESSignatureVerifier
{
public VerificationResult verify(byte[] signedData) throws ParserConfigurationException,
SAXException, IOException, GeneralSecurityException
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Element element = db.parse(new ByteArrayInputStream(signedData)).getDocumentElement();
XAdES_BES xades = (XAdES_BES) XAdES.newInstance(XAdES.BES, element);
XMLAdvancedSignature fileXML = XMLAdvancedSignature.newInstance(xades);
List<SignatureStatus> st = fileXML.validate();
VerificationResult verificationDetails = new VerificationResult();
verificationDetails.setValid(true);
for (SignatureStatus status : st)
{
if (status.getValidateResult() != ValidateResult.VALID)
{
verificationDetails.setValid(false);
verificationDetails.addError("Sign validation error: " + status.getReasonsAsText());
}
}
return verificationDetails;
}
}