private TimestampReference createRevocationTimestampReference(Element element) { String digestAlgorithm = DSSXMLUtils.getNode(element, xPathQueryHolder.XPATH__DIGEST_METHOD_ALGORITHM).getTextContent(); digestAlgorithm = DigestAlgorithm.forXML(digestAlgorithm).getName(); final String digestValue = DSSXMLUtils.getElement(element, xPathQueryHolder.XPATH__DIGEST_VALUE).getTextContent(); final TimestampReference revocationReference = new TimestampReference(digestAlgorithm, digestValue); return revocationReference; }
/** * This method creates * * @param element * @return * @throws eu.europa.ec.markt.dss.exception.DSSException */ private TimestampReference createCertificateTimestampReference(final Element element) throws DSSException { final String xmlDigestAlgorithm = DSSXMLUtils.getNode(element, xPathQueryHolder.XPATH__DIGEST_METHOD_ALGORITHM).getTextContent(); final DigestAlgorithm digestAlgorithm = DigestAlgorithm.forXML(xmlDigestAlgorithm); usedCertificatesDigestAlgorithms.add(digestAlgorithm); final Element digestValueElement = DSSXMLUtils.getElement(element, xPathQueryHolder.XPATH__DIGEST_VALUE); final String digestValue = (digestValueElement == null) ? "" : digestValueElement.getTextContent(); final TimestampReference reference = new TimestampReference(digestAlgorithm.name(), digestValue); return reference; }
@Override public List<OCSPRef> getOCSPRefs() { final List<OCSPRef> certIds = new ArrayList<OCSPRef>(); final Element signingCertEl = DSSXMLUtils.getElement(signatureElement, xPathQueryHolder.XPATH_OCSP_REFS); if (signingCertEl != null) { final NodeList ocspRefNodes = DSSXMLUtils.getNodeList(signingCertEl, xPathQueryHolder.XPATH__OCSPREF); for (int i = 0; i < ocspRefNodes.getLength(); i++) { final Element certId = (Element) ocspRefNodes.item(i); final Element digestAlgorithmEl = DSSXMLUtils.getElement(certId, xPathQueryHolder.XPATH__DAAV_DIGEST_METHOD); final Element digestValueEl = DSSXMLUtils.getElement(certId, xPathQueryHolder.XPATH__DAAV_DIGEST_VALUE); if (digestAlgorithmEl == null || digestValueEl == null) { throw new DSSNotETSICompliantException(DSSNotETSICompliantException.MSG.XADES_DIGEST_ALG_AND_VALUE_ENCODING); } final String xmlName = digestAlgorithmEl.getAttribute(XMLE_ALGORITHM); final DigestAlgorithm digestAlgo = DigestAlgorithm.forXML(xmlName); final String digestValue = digestValueEl.getTextContent(); final byte[] base64EncodedDigestValue = DSSUtils.base64Decode(digestValue); final OCSPRef ocspRef = new OCSPRef(digestAlgo, base64EncodedDigestValue, false); certIds.add(ocspRef); } } return certIds; }
@Override public List<CRLRef> getCRLRefs() { final List<CRLRef> certIds = new ArrayList<CRLRef>(); final Element signingCertEl = DSSXMLUtils.getElement(signatureElement, xPathQueryHolder.XPATH_REVOCATION_CRL_REFS); if (signingCertEl != null) { final NodeList crlRefNodes = DSSXMLUtils.getNodeList(signingCertEl, xPathQueryHolder.XPATH__CRL_REF); for (int i = 0; i < crlRefNodes.getLength(); i++) { final Element certId = (Element) crlRefNodes.item(i); final Element digestAlgorithmEl = DSSXMLUtils.getElement(certId, xPathQueryHolder.XPATH__DAAV_DIGEST_METHOD); final Element digestValueEl = DSSXMLUtils.getElement(certId, xPathQueryHolder.XPATH__DAAV_DIGEST_VALUE); final String xmlName = digestAlgorithmEl.getAttribute(XMLE_ALGORITHM); final DigestAlgorithm digestAlgo = DigestAlgorithm.forXML(xmlName); final CRLRef ref = new CRLRef(); ref.setDigestAlgorithm(digestAlgo); ref.setDigestValue(DSSUtils.base64Decode(digestValueEl.getTextContent())); certIds.add(ref); } } return certIds; }
@Override public List<CertificateRef> getCertificateRefs() { Element signingCertEl = DSSXMLUtils.getElement(signatureElement, xPathQueryHolder.XPATH_CERT_REFS); if (signingCertEl == null) { return null; } List<CertificateRef> certIds = new ArrayList<CertificateRef>(); NodeList certIdnodes = DSSXMLUtils.getNodeList(signingCertEl, "./xades:Cert"); for (int i = 0; i < certIdnodes.getLength(); i++) { Element certId = (Element) certIdnodes.item(i); Element issuerNameEl = DSSXMLUtils.getElement(certId, xPathQueryHolder.XPATH__X509_ISSUER_NAME); Element issuerSerialEl = DSSXMLUtils.getElement(certId, xPathQueryHolder.XPATH__X509_SERIAL_NUMBER); Element digestAlgorithmEl = DSSXMLUtils.getElement(certId, xPathQueryHolder.XPATH__CERT_DIGEST_DIGEST_METHOD); Element digestValueEl = DSSXMLUtils.getElement(certId, xPathQueryHolder.XPATH__CERT_DIGEST_DIGEST_VALUE); CertificateRef genericCertId = new CertificateRef(); if (issuerNameEl != null && issuerSerialEl != null) { genericCertId.setIssuerName(issuerNameEl.getTextContent()); genericCertId.setIssuerSerial(issuerSerialEl.getTextContent()); } String xmlName = digestAlgorithmEl.getAttribute(XMLE_ALGORITHM); genericCertId.setDigestAlgorithm(DigestAlgorithm.forXML(xmlName).getName()); genericCertId.setDigestValue(DSSUtils.base64Decode(digestValueEl.getTextContent())); certIds.add(genericCertId); } return certIds; }
@Override public SignaturePolicy getPolicyId() { final Element policyIdentifier = DSSXMLUtils.getElement(signatureElement, xPathQueryHolder.XPATH_SIGNATURE_POLICY_IDENTIFIER); if (policyIdentifier != null) { // There is a policy final Element policyId = DSSXMLUtils.getElement(policyIdentifier, xPathQueryHolder.XPATH__POLICY_ID); if (policyId != null) { // Explicit policy final String policyIdString = policyId.getTextContent(); final SignaturePolicy signaturePolicy = new SignaturePolicy(policyIdString); final Node policyDigestMethod = DSSXMLUtils.getNode(policyIdentifier, xPathQueryHolder.XPATH__POLICY_DIGEST_METHOD); final String policyDigestMethodString = policyDigestMethod.getTextContent(); final DigestAlgorithm digestAlgorithm = DigestAlgorithm.forXML(policyDigestMethodString); signaturePolicy.setDigestAlgorithm(digestAlgorithm); final Element policyDigestValue = DSSXMLUtils.getElement(policyIdentifier, xPathQueryHolder.XPATH__POLICY_DIGEST_VALUE); final String digestValue = policyDigestValue.getTextContent().trim(); signaturePolicy.setDigestValue(digestValue); return signaturePolicy; } else { // Implicit policy final Element signaturePolicyImplied = DSSXMLUtils.getElement(policyIdentifier, xPathQueryHolder.XPATH__SIGNATURE_POLICY_IMPLIED); if (signaturePolicyImplied != null) { return new SignaturePolicy(); } } } return null; }
final DigestAlgorithm digestAlgorithm = DigestAlgorithm.forXML(xmlAlgorithmName, DigestAlgorithm.SHA1);