Factura evaluada erroneamente con sello inválido
Publicado: Mié May 09, 2012 12:55 pm
Hola DADO.
He recurrido a ti puesto que por más que busco respuestas no encuentro por ningun lado y me encuentro confundida, además sé qe eres UN MUY BUENO en todo esto. Tengo un pequeño problema con el validador de comprobantes que estoy desarrollando, cabe mencionar que estoy utilizando Java con una librería que descargue (http://code.google.com/p/factura-electronica/) y las funciones que verifican el sello digital son las siguientes (la primera invoca a la segunda):
public void verificar() throws Exception {
String certStr = document.getCertificado();
Base64 b64 = new Base64();
byte[] cbs = b64.decode(certStr);
X509Certificate cert = KeyLoader
.loadX509Certificate(new ByteArrayInputStream(cbs));
verificar(cert);
}
public void verificar(Certificate cert) throws Exception {
String sigStr = document.getSello();
Base64 b64 = new Base64();
byte[] signature = b64.decode(sigStr);
byte[] bytes = getOriginalBytes();
boolean md5 = true;
if (getYear() < 2011) {
Signature sig = Signature.getInstance("MD5withRSA");
sig.initVerify(cert);
sig.update(bytes);
try {
sig.verify(signature);
} catch (SignatureException e){
// Not MD5
md5 = false;
}
}
if (getYear() > 2010 || !md5) {
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(cert);
sig.update(bytes);
boolean bool = sig.verify(signature);
if (!bool) {
throw new Exception("Invalid signature");
}
}
}
Se que no programas en Java pero al igual que .net es un lenguaje orientado a objetos. El problema es que al verificar un cfd con esta función me dice que su sello es invalido (invalid signature) y cuando lo valido con validaCFD, el validador del SAT y otro me dice que el sello es válido. Mi duda es si, esta función esta realizando adecuadamente la verificacion del sello puesto que no entiendo porque marca inválido. Te agradezco mucho la ayuda de antemano. Un abrazo
He recurrido a ti puesto que por más que busco respuestas no encuentro por ningun lado y me encuentro confundida, además sé qe eres UN MUY BUENO en todo esto. Tengo un pequeño problema con el validador de comprobantes que estoy desarrollando, cabe mencionar que estoy utilizando Java con una librería que descargue (http://code.google.com/p/factura-electronica/) y las funciones que verifican el sello digital son las siguientes (la primera invoca a la segunda):
public void verificar() throws Exception {
String certStr = document.getCertificado();
Base64 b64 = new Base64();
byte[] cbs = b64.decode(certStr);
X509Certificate cert = KeyLoader
.loadX509Certificate(new ByteArrayInputStream(cbs));
verificar(cert);
}
public void verificar(Certificate cert) throws Exception {
String sigStr = document.getSello();
Base64 b64 = new Base64();
byte[] signature = b64.decode(sigStr);
byte[] bytes = getOriginalBytes();
boolean md5 = true;
if (getYear() < 2011) {
Signature sig = Signature.getInstance("MD5withRSA");
sig.initVerify(cert);
sig.update(bytes);
try {
sig.verify(signature);
} catch (SignatureException e){
// Not MD5
md5 = false;
}
}
if (getYear() > 2010 || !md5) {
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(cert);
sig.update(bytes);
boolean bool = sig.verify(signature);
if (!bool) {
throw new Exception("Invalid signature");
}
}
}
Se que no programas en Java pero al igual que .net es un lenguaje orientado a objetos. El problema es que al verificar un cfd con esta función me dice que su sello es invalido (invalid signature) y cuando lo valido con validaCFD, el validador del SAT y otro me dice que el sello es válido. Mi duda es si, esta función esta realizando adecuadamente la verificacion del sello puesto que no entiendo porque marca inválido. Te agradezco mucho la ayuda de antemano. Un abrazo