Example usage for javax.xml.crypto.dsig XMLSignatureFactory getURIDereferencer

List of usage examples for javax.xml.crypto.dsig XMLSignatureFactory getURIDereferencer

Introduction

In this page you can find the example usage for javax.xml.crypto.dsig XMLSignatureFactory getURIDereferencer.

Prototype

public abstract URIDereferencer getURIDereferencer();

Source Link

Document

Returns a reference to the URIDereferencer that is used by default to dereference URIs in Reference objects.

Usage

From source file:be.fedict.eid.dss.document.zip.ZIPURIDereferencer.java

protected ZIPURIDereferencer(byte[] data, File tmpFile) {
    this.data = data;
    this.tmpFile = tmpFile;

    XMLSignatureFactory xmlSignatureFactory = XMLSignatureFactory.getInstance();
    this.baseUriDereferener = xmlSignatureFactory.getURIDereferencer();
    LOG.debug("base URI dereferences class: " + this.baseUriDereferener.getClass().getName());
}

From source file:be.fedict.eid.applet.service.signer.asic.ASiCURIDereferencer.java

protected ASiCURIDereferencer(byte[] data, File tmpFile) {
    this.data = data;
    this.tmpFile = tmpFile;

    XMLSignatureFactory xmlSignatureFactory = XMLSignatureFactory.getInstance();
    this.baseUriDereferener = xmlSignatureFactory.getURIDereferencer();
}

From source file:be.fedict.eid.applet.service.signer.ooxml.OOXMLURIDereferencer.java

protected OOXMLURIDereferencer(byte[] ooxmlDocument, URL ooxmlUrl) {
    if (null == ooxmlUrl && null == ooxmlDocument) {
        throw new IllegalArgumentException("need some reference to the OOXML document");
    }/* w  w  w.  j  a v a  2s.  c om*/
    this.ooxmlUrl = ooxmlUrl;
    this.ooxmlDocument = ooxmlDocument;
    XMLSignatureFactory xmlSignatureFactory = XMLSignatureFactory.getInstance();
    this.baseUriDereferencer = xmlSignatureFactory.getURIDereferencer();
}

From source file:be.fedict.eid.applet.service.signer.odf.ODFURIDereferencer.java

private ODFURIDereferencer(URL odfUrl, byte[] odfData) {
    if (null == odfUrl && null == odfData) {
        throw new IllegalArgumentException("odfUrl and odfData are null");
    }// w w  w.j a v a  2 s. c o  m
    if (null != odfUrl && null != odfData) {
        throw new IllegalArgumentException("odfUrl and odfData are both not null");
    }
    this.odfUrl = odfUrl;
    this.odfData = odfData;
    XMLSignatureFactory xmlSignatureFactory = XMLSignatureFactory.getInstance();
    this.baseUriDereferener = xmlSignatureFactory.getURIDereferencer();

    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    documentBuilderFactory.setNamespaceAware(true);

    try {
        this.documentBuilder = documentBuilderFactory.newDocumentBuilder();
    } catch (ParserConfigurationException e) {
        throw new RuntimeException("parser config error: " + e.getMessage(), e);
    }
    EntityResolver entityResolver = new ODFEntityResolver();
    this.documentBuilder.setEntityResolver(entityResolver);
}

From source file:eu.europa.ec.markt.dss.signature.xades.XAdESProfileBES.java

private DOMXMLSignature createEnveloped(SignatureParameters params, DOMSignContext signContext,
        org.w3c.dom.Document doc, String signatureId, String signatureValueId) throws NoSuchAlgorithmException,
        InvalidAlgorithmParameterException, JAXBException, MarshalException, XMLSignatureException {

    XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", new XMLDSigRI());

    signContext.setURIDereferencer(new URIDereferencer() {

        @Override//from ww w  .ja  v a  2s . c  o  m
        public Data dereference(URIReference uriReference, XMLCryptoContext context)
                throws URIReferenceException {
            final XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", new XMLDSigRI());
            Data data = fac.getURIDereferencer().dereference(uriReference, context);
            return data;
        }
    });

    Map<String, String> xpathNamespaceMap = new HashMap<String, String>();
    xpathNamespaceMap.put("ds", XMLSignature.XMLNS);

    List<Reference> references = new ArrayList<Reference>();

    /* The first reference concern the whole document */
    List<Transform> transforms = new ArrayList<Transform>();
    transforms.add(fac.newTransform(CanonicalizationMethod.ENVELOPED, (TransformParameterSpec) null));

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    org.w3c.dom.Document empty;
    try {
        empty = dbf.newDocumentBuilder().newDocument();
    } catch (ParserConfigurationException e1) {
        throw new RuntimeException(e1);
    }
    Element xpathEl = empty.createElementNS(XMLSignature.XMLNS, "XPath");
    xpathEl.setTextContent("");
    empty.adoptNode(xpathEl);
    XPathFilterParameterSpec specs = new XPathFilterParameterSpec("not(ancestor-or-self::ds:Signature)");
    DOMTransform t = (DOMTransform) fac.newTransform("http://www.w3.org/TR/1999/REC-xpath-19991116", specs);

    transforms.add(t);
    DigestMethod digestMethod = fac.newDigestMethod(params.getDigestAlgorithm().getXmlId(), null);
    Reference reference = fac.newReference("", digestMethod, transforms, null, "xml_ref_id");
    references.add(reference);

    List<XMLObject> objects = new ArrayList<XMLObject>();

    String xadesSignedPropertiesId = "xades-" + computeDeterministicId(params);
    QualifyingPropertiesType qualifyingProperties = createXAdESQualifyingProperties(params,
            xadesSignedPropertiesId, reference, MimeType.XML);
    qualifyingProperties.setTarget("#" + signatureId);

    Node marshallNode = doc.createElement("marshall-node");
    JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
    Marshaller marshaller = jaxbContext.createMarshaller();
    marshaller.marshal(xades13ObjectFactory.createQualifyingProperties(qualifyingProperties), marshallNode);
    Element qualifier = (Element) marshallNode.getFirstChild();

    // add XAdES ds:Object
    List<XMLStructure> xadesObjectContent = new LinkedList<XMLStructure>();
    xadesObjectContent.add(new DOMStructure(marshallNode.getFirstChild()));
    XMLObject xadesObject = fac.newXMLObject(xadesObjectContent, null, null, null);
    objects.add(xadesObject);

    Reference xadesreference = fac.newReference("#" + xadesSignedPropertiesId, digestMethod,
            Collections.singletonList(
                    fac.newTransform(CanonicalizationMethod.INCLUSIVE, (TransformParameterSpec) null)),
            XADES_TYPE, null);
    references.add(xadesreference);

    /* Signed Info */
    SignatureMethod sm = fac.newSignatureMethod(
            params.getSignatureAlgorithm().getXMLSignatureAlgorithm(params.getDigestAlgorithm()), null);

    CanonicalizationMethod canonicalizationMethod = fac
            .newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE, (C14NMethodParameterSpec) null);
    SignedInfo signedInfo = fac.newSignedInfo(canonicalizationMethod, sm, references);

    /* Creation of signature */
    KeyInfoFactory keyFactory = KeyInfoFactory.getInstance("DOM", new XMLDSigRI());

    List<Object> infos = new ArrayList<Object>();
    List<X509Certificate> certs = new ArrayList<X509Certificate>();
    certs.add(params.getSigningCertificate());
    if (params.getCertificateChain() != null) {
        for (X509Certificate c : params.getCertificateChain()) {
            if (!c.getSubjectX500Principal().equals(params.getSigningCertificate().getSubjectX500Principal())) {
                certs.add(c);
            }
        }
    }
    infos.add(keyFactory.newX509Data(certs));
    KeyInfo keyInfo = keyFactory.newKeyInfo(infos);

    DOMXMLSignature signature = (DOMXMLSignature) fac.newXMLSignature(signedInfo, keyInfo, objects, signatureId,
            signatureValueId);

    /* Marshall the signature to permit the digest. Need to be done before digesting the references. */
    signature.marshal(doc.getDocumentElement(), "ds", signContext);

    signContext.setIdAttributeNS((Element) qualifier.getFirstChild(), null, "Id");

    digestReferences(signContext, references);

    return signature;

}