/* Tibisay Movil Copyright (C) 2013 Antonio Araujo (aaraujo@cenditel.gob.ve), Jose Ruiz (jruiz@cenditel.gob.ve), Fundacion Centro Nacional de Desarrollo e Investigacion en Tecnologias Libres - CENDITEL. La Fundación CENDITEL concede permiso para usar, copiar, distribuir y/o modificar este programa, reconociendo el derecho que la humanidad posee al libre acceso al conocimiento, bajo los términos de la licencia de software GPL versión 2.0 de la Free Software Foundation. Este programa se distribuye con la esperanza de que sea util, pero SIN NINGUNA GARANTIA; tampoco las implicitas garantias de MERCANTILIDAD o ADECUACION A UN PROPOSITO PARTICULAR. Para mayor información sobre los términos de la licencia ver el archivo llamado "gpl-2.0.txt" en ingles. */ 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; } }