package ve.gob.cenditel.tibisaymovil; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.Collection; import ee.sk.digidoc.DigiDocException; import android.content.Context; import android.net.Uri; import android.os.Environment; import android.os.StatFs; import android.text.format.DateFormat; import android.util.Log; /** * Clase para utilidades sobre contenedores BDOC * * */ public class BDOCUtils { public BDOCUtils() {} public static String translateErrors(ArrayList list) { String errorList = ""; for (int i = 0; i < list.size(); i++) { if ( ((DigiDocException) list.get(i)).getCode() == 82) { errorList = errorList.concat("El certificado firmante expiró"); } } return errorList; } // funcion para traducir el codigo de error al verificar una firma electronica public static String translateError(int codeError) { String stringError = ""; if ( codeError == 38) stringError = stringError.concat("Error interno: No se encontró el valor de la firma."); if ( codeError == 39) stringError = stringError.concat("El certificado del firmante no existe."); if ( codeError == 53) stringError = stringError.concat("No se encontró el certificado del servidor OCSP."); if ( codeError == 70) stringError = stringError.concat("Error interno: sólo se soporta un servidor OCSP. Servidor OCSP inválido."); if ( codeError == 78) stringError = stringError.concat("Error interno: no hay elemento de referencia para uno de los archivos firmados."); if ( codeError == 79) stringError = stringError.concat("Error interno: el valor de la reseña (hash) es incorrecto."); if ( codeError == 80) stringError = stringError.concat("Error interno: no hay elemento de referencia para bloque SignedProperties de la firma."); if ( codeError == 81) stringError = stringError.concat("El certificado del firmante es inválido o no existe."); if ( codeError == 82) stringError = stringError.concat("El certificado del firmante expiró."); if ( codeError == 83) stringError = stringError.concat("Error interno: el valor del OCSP está vacío"); if ( codeError == 90) stringError = stringError.concat("La firma no tiene confirmación OCSP."); if ( codeError == 94) stringError = stringError.concat("El certificado firmante no ha sido firmado por una AC raíz conocida."); if ( codeError == 129) stringError = stringError.concat("Se está usando un algoritmo de reseña (hash) considerado débil."); if ( codeError ==162) stringError = stringError.concat("El certificado del firmante no posee el bit de no repudio."); return stringError; } public static String translateError(String e) { String translatedError = null; if (e.contains("Missing signature value!")) { translatedError = "Error interno: El valor de la firma no se encontró en el archivo."; } if (e.contains("Signers cert missing!")) { translatedError = "El certificado del firmante no se encuentó."; } if (e.contains("Signers cert not trusted, missing CA cert!")) { translatedError = "El certificado del firmante no es confiable; No se encuentra el certificado de la AC que lo emitió."; } if (e.contains("Signers cert does not have non-repudiation bit set!")) { translatedError = "El certificado del firmante no posee el uso de clave no repudio o Sin-rechazo."; } if (e.contains("No notarys certificate!")) { translatedError = "No se encontró el certificado para el servidor OCSP."; } if (e.contains("Wrong notarys certificate:")) { translatedError = "El certificado del servidor OCSP es incorrecto."; } if (e.contains("Notary certificates digest doesn't match!")) { translatedError = "Error interno: La reseña o hash del certificado del servidor OCSP no coincide."; } if (e.contains("Error calculating notary certificate digest!")) { translatedError = "Error interno: la reseña o hash del certificado del servidor OCSP no es correcta."; } if (e.contains("does not match OcpsRef-s producedAt:")) { translatedError = "La hora de la notarización de la firma del servidor OCSP no es correcta"; } if (e.contains("Currently supports only one OCSP. Invalid ocsp")) { translatedError = "Servidor OCSP inválido. Sólo está soportado un servidor OCSP."; } if (e.contains("No Reference element for DataFile:")) { translatedError = "Error interno: no hay elemento de referencia para uno de los archivos firmados."; } if (e.contains("Invalid or missing signers cert!")) { translatedError = "El certificado del firmante es inválido o no se encuentra en el archivo."; } if (e.contains("Invalid signature method!")) { translatedError = "Algoritmo de firma no soportado."; } if (e.contains("Signature method:")) { translatedError = "El algoritmo de firma no está disponible en la aplicación."; } if (e.contains("Invalid signature value! Signers cert and signature value don't match!")) { translatedError = "Error interno: el valor de la firma no es correcto. El certificado firmante y el valor de la firma no coinciden."; } if (e.contains("Signature asn.1 prefix:")) { translatedError = "Error interno: prefijo ASN.1 de la firma no es correcto."; } if (e.contains("Invalid signature value! Signature value decrypted len:")) { translatedError = "Error interno: valor de firma inválido. No existe prefijo de estructura ASN.1."; } if (e.contains("Invalid signature value!")) { translatedError = "Valor de firma inválido."; } if (e.contains("Missing Reference for file")) { translatedError = "Error interno: no existe una referencia al archivo"; } if (e.contains("Signers certificate has expired!")) { translatedError = "El certificado del firmante expiró."; } if (e.contains("Failed to verify OCSP for:")) { translatedError = "No se pudo verificar el certificado del servidor OCSP."; } if (e.contains("OCSP value is empty!")) { translatedError = "Error interno: el valor del certificado del OCSP es vacío."; } if (e.contains("No OCSP ref for uri:")) { translatedError = "Error interno: no existe una referencia para el certificado del servidor OCSP."; } if (e.contains("Notarys digest doesn't match!")) { translatedError = "Error interno: la reseña o hash del certificado OCSP no coincide."; } if (e.contains("Signature has no OCSP confirmation!")) { translatedError = "La firma no tiene confirmación de un servidor OCSP."; } //if (e.contains("")) { // translatedError = "El certificado firmante no ha sido firmado por una AC raíz conocida."; //} if (e.contains("The current BDoc container uses weaker encryption method than officialy accepted in Estonia")) { translatedError = "El archivo firmado utiliza un algoritmo de reseña (hash) considerado débil."; } if (e.contains("81 -")) { translatedError = "Error interno: tipo de bloque desconocido."; } else{ //translatedError = e; } return translatedError; } }