0
You only need to save the signature tag of an xml. The method for signature is this:
private void assinarMdfe(String tipo, XMLSignatureFactory fac,
ArrayList<Transform> transformList, PrivateKey privateKey,
KeyInfo ki, Document document, int index) throws Exception {
NodeList elements = null;
elements = document.getElementsByTagName("infMDFe");
org.w3c.dom.Element el = (org.w3c.dom.Element) elements.item(index);
el.setIdAttribute("Id", true);
String id = el.getAttribute("Id");
Reference ref = fac.newReference("#" + id,
fac.newDigestMethod(DigestMethod.SHA1, null), transformList,
null, null);
SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(
CanonicalizationMethod.INCLUSIVE,
(C14NMethodParameterSpec) null), fac
.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
Collections.singletonList(ref));
XMLSignature signature = fac.newXMLSignature(si, ki);
DOMSignContext dsc = new DOMSignContext(privateKey,
document.getDocumentElement().getElementsByTagName(tipo).item(index));
signature.sign(dsc);
}
Generates an xml similar to this:
<enviMDFe xmlns="http://www.portalfiscal.inf.br/mdfe" versao="1.00">
<idLote>000000000000001</idLote>
<MDFe xmlns="http://www.portalfiscal.inf.br/mdfe">
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#MDFe31170922257352000160580010000000011442411352">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>mUCRQEgobqD4Tx/lvnQF4HPSOWU=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>DtPdsuhQgDxNsoM/YYir7+jIFxkkx2HE6LEmRx13LKzcR2g0crOG7J6dR615xczb4+APBzepHTJrp7Or4TFX8NI1BTXMRerjsv+waOlSxvjFnEKHJvsDlYxTYqz23fgK5YylVZcoYRHfbETwO36ejPO3X4xagrpR67BhtCB7NoOZ8NsPv5auQ1FP/lErlKPsb2ohnvmwTgfLPUwyHRwZM8jDpbk3eigm/pr2UxbyMK3rYRviQ1FBapXijfysrhyzKAH8WYOclyze6/UjG7qbVIrPP6JvzAq5hVSeqsNRyeEdmPxwlWi31Ph/3foki/YlVUHlKNdySpTuIoTmrd2GsQ==</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>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</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</MDFe>
"
Only I get the xml with this method:
protected String outputXML(Document doc) throws TransformerException, UnsupportedEncodingException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans = tf.newTransformer();
trans.transform(new DOMSource(doc), new StreamResult(os));
String xml = os.toString("UTF-8");
if ((xml != null) && (!"".equals(xml))) {
xml = xml.replaceAll("\\r\\n", "");
xml = xml.replaceAll(" standalone=\"no\"", "");
}
return xml;
}
I would like to pick as string only the tag Signature
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#MDFe31170922257352000160580010000000011442411352">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>mUCRQEgobqD4Tx/lvnQF4HPSOWU=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>DtPdsuhQgDxNsoM/YYir7+jIFxkkx2HE6LEmRx13LKzcR2g0crOG7J6dR615xczb4+APBzepHTJrp7Or4TFX8NI1BTXMRerjsv+waOlSxvjFnEKHJvsDlYxTYqz23fgK5YylVZcoYRHfbETwO36ejPO3X4xagrpR67BhtCB7NoOZ8NsPv5auQ1FP/lErlKPsb2ohnvmwTgfLPUwyHRwZM8jDpbk3eigm/pr2UxbyMK3rYRviQ1FBapXijfysrhyzKAH8WYOclyze6/UjG7qbVIrPP6JvzAq5hVSeqsNRyeEdmPxwlWi31Ph/3foki/YlVUHlKNdySpTuIoTmrd2GsQ==</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>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</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
It would be possible to take the signature value in some of the steps?