[Link].
bo
SISTEMA DE FACTURACIÓN
ELECTRÓNICA
1
FIRMADO DE DOCUMENTO
Ejemplo de firmado XML, basado en librería en java que implementa
funciones para la firma digital.
fuente: [Link]
digest_sha256
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link].X509Certificate;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class Ejemplo {
/**
* @param datos - array de bytes correspondiente al archivo XML
que se va a firmar
* @param priv - llave privada para el firmado
* @param cert - certificado emitido por la ADSIB asociado a la
llave publica
* @return array de bytes correspondiente al archivo XML con la
firma enveloped
* @throws ParserConfigurationException
* @throws IOException
* @throws SAXException
* @throws XMLSecurityException
*/
public byte[] firmarDsig(byte[] datos, PrivateKey priv,
X509Certificate... cert) throws ParserConfigurationException, IOException,
SAXException, XMLSecurityException {
[Link]([Link], “”);
LÍNEA GRATUITA DE CONSULTAS TRIBUTARIAS 800 10 34 44
[Link]
SISTEMA DE FACTURACIÓN
ELECTRÓNICA
2
Document documento = leerXML(datos);
Element root = (Element) [Link]();
[Link](false);
XMLSignature signature = new XMLSignature(documento, null,
XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256);
[Link]([Link]());
Transforms transforms = new Transforms(documento);
[Link](Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
[Link](Transforms.TRANSFORM_C14N_WITH_COMMENTS);
[Link](“”, transforms, MessageDigestAlgorithm.ALGO_
ID_DIGEST_SHA256);
if (cert != null) {
[Link](cert[0]);
KeyInfo ki = [Link]();
ki.itemX509Data(0).addSubjectName(cert[0].
getSubjectX500Principal().getName());
ki.itemX509Data(0).addIssuerSerial(cert[0].
getIssuerX500Principal().getName(), cert[0].getSerialNumber());
}
[Link](priv);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
[Link](documento, baos, true);
return [Link]().getBytes();
}
private Document leerXML(byte datos[]) throws
ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.
newInstance();
DocumentBuilder builder;
[Link](true);
builder = [Link]();
return [Link](new ByteArrayInputStream(datos));
}
}
[Link] La Paz 21 de noviembre del 2018