document.write(""); document.write(""); /* ****************** * INICIALIZACION * ****************** */ var avisoInitAutoFirma = 'Para poder firmar necesitará tener instalada la aplicación AutoFirma del MINHAP, descárguela aquí'; /** * Metodo que se mete automaticametne en el onload siempre que se cargue el certif.js * No debe invocarse explicitamente. * Es responsable de la carga del Componente de Firma **/ function initClient() { //Metodo que debe cargarse en el onload de las paginas que utilicen el Componente Cliente if (document.getElementById("labelCombo") != null) document.getElementById("labelCombo").style.display = "none"; else if (document.getElementById("formulCertif:labelCombo") != null) document.getElementById("formulCertif:labelCombo").style.display = "none"; if (document.getElementById("certificados") != null) document.getElementById("certificados").style.display = "none"; //Compruebo si la pagina usa cl@veFirma y en ese caso cambio el posible mensaje de AutoFirma if (document.getElementById("firmaClave") != null) avisoInitAutoFirma = 'Si desea firmar con un certificado electrónico instalado en su ordenador necesitará tener instalada la aplicación AutoFirma del MINHAP, descárguela aquí'; AutoScript.cargarAppAfirma(); muestraOcultaTrasCarga(); try { AutoScript.checkTime(AutoScript.CHECKTIME_RECOMMENDED, 300000, 'http://www.zaragoza.es:80/recursos_unicos/firma/js/ficheroVacio.js?parNoCache=' + Math.random()); AutoScript.setStickySignatory(true); AutoScript.setServlets("https://www.zaragoza.es/afirma-signature-storage/StorageService", "https://www.zaragoza.es/afirma-signature-retriever/RetrieveService"); } catch (e) { console.log(e.name); // logs 'Error' console.log(e.message); // logs 'The message' o un error de JavaScript) } } function muestraOcultaTrasCarga() { if (document.getElementById("loginCargando") != null) { if (true) { //Si no estamos intranet saco mensaje document.getElementById("loginCargando").innerHTML = avisoInitAutoFirma; } else { document.getElementById("loginCargando").style.display = "none"; } } if (document.getElementById("botonLogin") != null) { document.getElementById("botonLogin").disabled = false; } } // Inicializacion del componente document.write(""); /* ************************ * OPERACIONES DE FIRMA * ************************ */ /** * Firma en cliente de acuerdo a los parametros indicados * @param {ParametroFirmaCliente} paramFirma Parametros de acuerdo a los que se realizara la firma en cliente * @returns Datos firmados en Base64 si la ejecucion fue correcta, devuelve null si hay error * @type String */ function firmaAYTO(paramFirma) { if (true) firmaAYTO_AUTOSCRIPT(paramFirma); else firmaAYTO_MINIAPPLET(paramFirma); } //Funcion de firma con la integración a partir de 2022 (AutoScript) function firmaAYTO_AUTOSCRIPT(paramFirma) { //Controlo que me hayan pasado los datos a firmar if ((paramFirma.sDatosAFirmar == null || paramFirma.sDatosAFirmar == '') && (paramFirma.sResumenDatosAFirmar == null || paramFirma.sResumenDatosAFirmar == '')) return warn("No se han facilitado datos para firmar, pulse el botón volver y reintente el proceso de firma. Si el error persiste comuníquenoslo."); //Establezco los callbackHandler de éxito y error en caso de que no estuvieran especificados y no se utilice el applet if (paramFirma.fCallbackHandlerExito == null) { if (paramFirma.oDatosFirmados == null || (paramFirma.oFormSubmit == null && paramFirma.oClickButtonOnSuccess ==null)) return warn('No se ha establecido la forma de devolver los resultados de la firma, pulse el botón volver y reintente el proceso de firma. Si el error persiste comuníquenoslo.'); paramFirma.fCallbackHandlerExito = function(sDocFirmadoMCF) { if (sDocFirmadoMCF == null) { warn("Se ha producido algun error al firmar. Se ha devuelto una firma vacía."); } else { paramFirma.oDatosFirmados.value = sDocFirmadoMCF; if (paramFirma.oClickButtonOnSuccess != null) paramFirma.oClickButtonOnSuccess.click(); if (paramFirma.oFormSubmit != null) paramFirma.oFormSubmit.submit(); } }; } if (paramFirma.fCallbackHandlerError == null) { paramFirma.fCallbackHandlerError = function (errorType, errorMessage) { warn("Se produjo un error (" + errorType + " - " + errorMessage + ")"); if (paramFirma.oDatosFirmados != null) paramFirma.oDatosFirmados.value = null; }; } //Preparo los properties según cada formato de firma var params = ''; if (paramFirma.iFormato == FORMATO_CADES) { params = paramFirma.bDatosIncluidos ? 'mode=implicit' : 'mode=explicit'; if (paramFirma.sPoliticaFirma != null) { params = addParam(params, 'expPolicy', paramFirma.sPoliticaFirma); } else { params = addParam(params, 'policyIdentifier', paramFirma.sIDPoliticaFirma); params = addParam(params, 'policyIdentifierHash', paramFirma.sResumenPolitica); params = addParam(params, 'policyIdentifierHashAlgorithm', traduceALGPOL_AUTOSCRIPT(paramFirma.sAlgResumenPolitica)); params = addParam(params, 'policyQualifier', paramFirma.sURIPolitica); } params = addParam(params, 'contentTypeOid', paramFirma.sOIDFormatoDatosOriginales); params = addParam(params, 'contentDescription', paramFirma.sMimeTypeFormatoDatosOriginales); if (paramFirma.bUsaResumen) { if (paramFirma.iTipoFMultiple == TIPO_FMULTIPLE_NO) paramFirma.sDatosAFirmar = paramFirma.sResumenDatosAFirmar; //else paramFirma.sDocOriginal = paramFirma.sResumenDatosAFirmar; //Ya no es necesario en Autoscript params = addParam(params, 'precalculatedHashAlgorithm', traduceALG(paramFirma.sAlgoritmoFirma)); } } else if (paramFirma.iFormato == FORMATO_XADES) { //Firma XAdES if (paramFirma.sPoliticaFirma == POLITICA_FACTURAE || paramFirma.sIDPoliticaFirma == OID_POLITICA_FACTURAE_v30_XADES || paramFirma.sIDPoliticaFirma == OID_POLITICA_FACTURAE_v31_XADES) { //Las firmas en formato FacturaE no tienen parametros adicionales } else { //XAdES normal (no facturae) if (paramFirma.bUsaManifest) { params = 'useManifest=true'; for (i = 0; i < paramFirma.arrManifestURI.length; i++) { params = addParam(params, 'uri' + (i+1), paramFirma.arrManifestURI[i]); params = addParam(params, 'md' + (i+1), paramFirma.arrManifestHash[i]); params = addParam(params, 'mimeType' + (i+1), paramFirma.arrManifestMimeType[i]); } } else { if (paramFirma.iXMLTipoEnvoltorio == ENVOLTORIO_ATTACHED_ENVELOPED) params = paramFirma.bDatosIncluidos ? 'format=XAdES Enveloped' : 'format=XAdES Enveloping'; else params = 'format=XAdES Enveloped'; } if (paramFirma.sPoliticaFirma != null) { params = addParam(params, 'expPolicy', paramFirma.sPoliticaFirma); } else { params = addParam(params, 'policyIdentifier', paramFirma.sIDPoliticaFirma); params = addParam(params, 'policyIdentifierHash', paramFirma.sResumenPolitica); params = addParam(params, 'policyIdentifierHashAlgorithm', traduceALGPOL_AUTOSCRIPT(paramFirma.sAlgResumenPolitica)); params = addParam(params, 'policyQualifier', paramFirma.sURIPolitica); params = addParam(params, 'policyDescription', paramFirma.sDescripcionPolitica); } params = addParam(params, 'contentTypeOid', paramFirma.sOIDFormatoDatosOriginales); params = addParam(params, 'referencesDigestMethod', traduceALGXAdES(paramFirma.sAlgoritmoFirma)); if (paramFirma.bUsaResumen) params = addParam(params, 'precalculatedHashAlgorithm', traduceALG(paramFirma.sAlgoritmoFirma)); params = addParam(params, 'mimeType', paramFirma.sMimeTypeFormatoDatosOriginales); params = addParam(params, 'nodeToSign', paramFirma.sXMLElementoAFirmar); //paramFirma.sXMLNodoPadre } } else if (paramFirma.iFormato == FORMATO_PADES) { //Firma PAdES if (paramFirma.sPoliticaFirma == POLITICA_AGE || paramFirma.sIDPoliticaFirma == OID_POLITICA_AGE_v19_CADES || paramFirma.sIDPoliticaFirma == OID_POLITICA_AGE_v18_CADES) params = 'signatureSubFilter=ETSI.CAdES.detached'; else params = 'signatureSubFilter=adbe.pkcs7.detached'; if (paramFirma.sPoliticaFirma != null) { params = addParam(params, 'expPolicy', paramFirma.sPoliticaFirma); } else { params = addParam(params, 'policyIdentifier', paramFirma.sIDPoliticaFirma); params = addParam(params, 'policyIdentifierHash', paramFirma.sResumenPolitica); params = addParam(params, 'policyIdentifierHashAlgorithm', traduceALGPOL_AUTOSCRIPT(paramFirma.sAlgResumenPolitica)); params = addParam(params, 'policyQualifier', paramFirma.sURIPolitica); } params = addParam(params, 'signaturePages', paramFirma.sPaginas); params = addParam(params, 'signaturePositionOnPageLowerLeftX', paramFirma.iEsquinaAbajoIzquierdaX); params = addParam(params, 'signaturePositionOnPageLowerLeftY', paramFirma.iEsquinaAbajoIzquierdaY); params = addParam(params, 'signaturePositionOnPageUpperRightX', paramFirma.iEsquinaArribaDerechaX); params = addParam(params, 'signaturePositionOnPageUpperRightY', paramFirma.iEsquinaArribaDerechaY); params = addParam(params, 'signatureRubricImage', paramFirma.sImagen); params = addParam(params, 'layer2Text', paramFirma.sNombreFirmante); params = addParam(params, 'layer2FontFamily', paramFirma.iFuenteTextoFirma); params = addParam(params, 'layer2FontSize', paramFirma.iTamanioTextoFirma); params = addParam(params, 'layer2FontStyle', paramFirma.iEstiloTextoFirma); params = addParam(params, 'layer2FontColor', paramFirma.sColorTextoFirma); params = addParam(params, 'signatureRotation', paramFirma.iRotacionFirma); params = addParam(params, 'visibleSignature', paramFirma.sFirmaVisible); params = addParam(params, 'visibleAppearance', paramFirma.sUsrConfigAparienciaFirma); } params = addParam(params, 'includeOnlySignningCertificate', 'false'); params = addParam(params, 'allowSignLTSignature', 'true'); //se debe permitir la firma múltiple de firmas longevas de archivo. params = addParam(params, 'headless', 'true'); //Si solo hay un certificado lo selecciona sin mostrar la ventana de seleccion params = addParam(params, 'serverUrl', 'https://www.zaragoza.es/afirma-server-triphase-signer/SignatureService'); //Por si lo necesitara configuro el servidor trifasico params = addParam(params, 'signerClaimedRoles', paramFirma.sRolFirmante); //Realizo la invocacion asincrona al proceso de firma if (paramFirma.iTipoFMultiple == TIPO_FMULTIPLE_NO) { AutoScript.sign( /* dataB64 */ paramFirma.sDatosAFirmar, /* algorithm */ traduceALG(paramFirma.sAlgoritmoFirma), /* format */ traduceFORMATO(paramFirma), /* params */ params, /* successCallback */ paramFirma.fCallbackHandlerExito, /* errorCallback */ paramFirma.fCallbackHandlerError); } else { AutoScript.coSign( /* signB64 */ paramFirma.sDatosAFirmar, /* dataB64 */ null, //En autoscript está definido con y sin este parametro, si no lo pongo me llama al metodo con el parametro y se desplazan todos los parametros /* algorithm */ traduceALG(paramFirma.sAlgoritmoFirma), /* format */ traduceFORMATO(paramFirma), /* params */ params, /* successCallback */ paramFirma.fCallbackHandlerExito, /* errorCallback */ paramFirma.fCallbackHandlerError); } } //Funcion de firma con la integración anterior a 2021 (miniapplet + AutoFirma) function firmaAYTO_MINIAPPLET(paramFirma) { if (!isApplet()) { //Caso AutoFirma if (paramFirma.bFirmaBloque) return warn("Para poder realizar firma en bloque es necesario utilizar el componente basado en applet y su configuración local no lo soporta"); if ((paramFirma.sDatosAFirmar == null || paramFirma.sDatosAFirmar == '') && (paramFirma.sResumenDatosAFirmar == null || paramFirma.sResumenDatosAFirmar == '')) return warn("Para poder firmar seleccionando un fichero de su ordenador es necesario utilizar el componente basado en applet y su configuración local no lo soporta"); //Establezco los callbackHandler de éxito y error en caso de que no estuvieran especificados y no se utilice el applet if (paramFirma.fCallbackHandlerExito == null) { if (paramFirma.oDatosFirmados == null || (paramFirma.oFormSubmit == null && paramFirma.oClickButtonOnSuccess ==null)) return warn('Esta aplicación no soporta componentes de firma que no estén basados en plugins java (applet) y su configuración local no soporta este tipo de plugins'); paramFirma.fCallbackHandlerExito = function(sDocFirmadoMCF){ if (sDocFirmadoMCF == null) { warn("Se ha producido algun error al firmar. Se ha devuelto una firma nula"); } else { paramFirma.oDatosFirmados.value = sDocFirmadoMCF; if (paramFirma.bAlmacenaEnFichero && !paramFirma.bFirmaBloque) guardaFichero(sDocFirmadoMCF, 'DocumentoFirmado.' + getExtensionFichero(paramFirma), paramFirma); if (paramFirma.oClickButtonOnSuccess != null) paramFirma.oClickButtonOnSuccess.click(); if (paramFirma.oFormSubmit != null) paramFirma.oFormSubmit.submit(); } }; } if (paramFirma.fCallbackHandlerError == null) { paramFirma.fCallbackHandlerError = function (errorType, errorMessage) { warn("Se produjo un error (" + errorType + " - " + errorMessage + ")"); if (paramFirma.oDatosFirmados != null) paramFirma.oDatosFirmados.value = null; }; } } try { var sDocFirmado = ''; if ((paramFirma.sDatosAFirmar != null && paramFirma.sDatosAFirmar != '') || (paramFirma.bUsaResumen && paramFirma.sResumenDatosAFirmar != null && paramFirma.sResumenDatosAFirmar != '')) { //Si se especifican los datos a firmar if (paramFirma.bFirmaBloque) { //Si se hace firma en bloque var lDatosAFirmar = null; var lDocOriginal = null; var lResumenDatosAFirmar = null; var numFirmas = null; //Parseo los diferentes bloques de datos según el caso (firmas multple o no, con resumen o no) if (paramFirma.iTipoFMultiple == TIPO_FMULTIPLE_NO) { //Firma sencilla if (paramFirma.bUsaResumen) { lResumenDatosAFirmar = paramFirma.sResumenDatosAFirmar.split(","); numFirmas = lResumenDatosAFirmar.length; } else { lDatosAFirmar = paramFirma.sDatosAFirmar.split(","); numFirmas = lDatosAFirmar.length; } } else { //Firma multiple if (paramFirma.bUsaResumen) { lResumenDatosAFirmar = paramFirma.sResumenDatosAFirmar.split(","); } else { lDocOriginal = paramFirma.sDocOriginal.split(","); } lDatosAFirmar = paramFirma.sDatosAFirmar.split(","); numFirmas = lDatosAFirmar.length; } //Creo un objeto como si estuviera en una firma NO en bloque paramFirma.setFirmaBloque(false); fCallbackHandlerExitoSeg = paramFirma.fCallbackHandlerExito; paramFirma.setCallbackHandlerExito(null); for (i = 0; i < numFirmas; i++) { if (paramFirma.iTipoFMultiple == TIPO_FMULTIPLE_NO) { //Firma sencilla if (paramFirma.bUsaResumen) paramFirma.setResumenDatosAFirmar(lResumenDatosAFirmar[i]); else paramFirma.setDatosAFirmar(lDatosAFirmar[i]); } else { if (paramFirma.bUsaResumen) paramFirma.setResumenDatosAFirmar(lResumenDatosAFirmar[i]); else paramFirma.setDocOriginal(lDocOriginal[i]); paramFirma.setDatosAFirmar(lDatosAFirmar[i]); } var sDocIFirmado = firmaAYTO(paramFirma); if (sDocIFirmado == null || (typeof sDocIFirmado === "undefined")) { if (paramFirma.fCallbackHandlerError != null) { paramFirma.fCallbackHandlerError('ERROR_SIGN_NULL', 'Se ha producido algun error al firmar. Se ha devuelto una firma nula'); } else { warn("Se ha producido algun error al firmar. Se ha devuelto una firma nula"); } return null; } sDocFirmado = sDocFirmado + sDocIFirmado + ","; } sDocFirmado = sDocFirmado.substring(0,sDocFirmado.length-1); paramFirma.setFirmaBloque(true); paramFirma.setCallbackHandlerExito(fCallbackHandlerExitoSeg); fCallbackHandlerExitoSeg(sDocFirmado); } } else { paramFirma.setFirmaBloque(false); paramFirma.sDatosAFirmar = MiniApplet.getFileNameContentBase64(); if (paramFirma.sDatosAFirmar != null) //Elimino el nombre del fichero que devuelven algunos navegadores paramFirma.sDatosAFirmar = paramFirma.sDatosAFirmar.substring(paramFirma.sDatosAFirmar.indexOf('|') + 1); if (paramFirma.sDatosAFirmar == null) return null; } if (!paramFirma.bFirmaBloque) { //Realizo la firma sDocFirmado = firmaAYTO_MCF(paramFirma); } if (paramFirma.fCallbackHandlerExito == null) { if (sDocFirmado == null || (typeof sDocFirmado === "undefined")) { warn("Se ha producido algun error al firmar. Se ha devuelto una firma nula"); } else { if (paramFirma.oDatosFirmados != null) paramFirma.oDatosFirmados.value = sDocFirmado; if (paramFirma.bAlmacenaEnFichero && !paramFirma.bFirmaBloque) guardaFichero(sDocFirmado, 'DocumentoFirmado.' + getExtensionFichero(paramFirma), paramFirma); if (paramFirma.oClickButtonOnSuccess != null) paramFirma.oClickButtonOnSuccess.click(); if (paramFirma.oFormSubmit != null) paramFirma.oFormSubmit.submit(); } } return sDocFirmado; } catch(exception) { //window[paramFirma.fCallbackHandlerError](exception.name, exception.message); warn("Se produjo un error (" + exception.name + " - " + exception.message + ")"); if (paramFirma.oDatosFirmados != null) paramFirma.oDatosFirmados.value = null; return null; } } function firmaAYTO_MCF(paramFirma) { var sDocFirmado = ''; var params = ''; MiniApplet.setStickySignatory(true);//Parametro para indicar que las siguientes firmas las haga con el mismo certificado if (paramFirma.iFormato == FORMATO_CADES) { if (paramFirma.bDatosIncluidos) // || paramFirma.iTipoFMultiple == TIPO_FMULTIPLE_SECUENCIAL) params = 'mode=implicit'; else params = 'mode=explicit'; params = addParam(params, 'contentTypeOid', paramFirma.sOIDFormatoDatosOriginales); params = addParam(params, 'contentDescription', paramFirma.sMimeTypeFormatoDatosOriginales); params = addParam(params, 'policyIdentifier', paramFirma.sIDPoliticaFirma); params = addParam(params, 'policyIdentifierHash', paramFirma.sResumenPolitica); params = addParam(params, 'policyIdentifierHashAlgorithm', traduceALGPOL_MCF(paramFirma.sAlgResumenPolitica)); params = addParam(params, 'policyQualifier', paramFirma.sURIPolitica); params = addParam(params, 'includeOnlySignningCertificate', 'false'); params = addParam(params, 'headless', 'true'); //Si solo hay un certificado lo selecciona si mostrar la ventana de seleccion if (paramFirma.bUsaResumen) { if (paramFirma.iTipoFMultiple == TIPO_FMULTIPLE_NO) paramFirma.sDatosAFirmar = paramFirma.sResumenDatosAFirmar; else paramFirma.sDocOriginal = paramFirma.sResumenDatosAFirmar; params = addParam(params, 'precalculatedHashAlgorithm', paramFirma.sAlgoritmoFirma); } } else if (paramFirma.iFormato == FORMATO_XADES) { //Firma XAdES if (paramFirma.sIDPoliticaFirma == OID_POLITICA_FACTURAE_v30_XADES || paramFirma.sIDPoliticaFirma == OID_POLITICA_FACTURAE_v31_XADES) { //Las firmas en formato FacturaE no tienen parametros adicionales que podamos incorporar con este interfaz } else { //XAdES normal (no facturae) if (paramFirma.iXMLTipoEnvoltorio == ENVOLTORIO_ATTACHED_ENVELOPED) if (paramFirma.bDatosIncluidos) params = 'format=XAdES Enveloped'; else params = 'format=XAdES Enveloping'; else params = 'format=XAdES Enveloped'; params = addParam(params, 'includeOnlySignningCertificate', 'false'); params = addParam(params, 'policyIdentifier', paramFirma.sIDPoliticaFirma); params = addParam(params, 'policyIdentifierHash', paramFirma.sResumenPolitica); params = addParam(params, 'policyIdentifierHashAlgorithm', traduceALGPOL_MCF(paramFirma.sAlgResumenPolitica)); params = addParam(params, 'policyQualifier', paramFirma.sURIPolitica); params = addParam(params, 'policyDescription', paramFirma.sDescripcionPolitica); params = addParam(params, 'contentTypeOid', paramFirma.sOIDFormatoDatosOriginales); params = addParam(params, 'mimeType', paramFirma.sMimeTypeFormatoDatosOriginales); params = addParam(params, 'nodeToSign', paramFirma.sXMLElementoAFirmar); //paramFirma.sXMLNodoPadre } //**** Los datos siempre van en B64, si los datos a firmar son XML hay que pasarlos a B64: MiniApplet.getBase64FromText(sDatosAFirmar, 'default') //**** Los datos siempre van en B64, si los datos a firmar son XML hay que pasarlos a B64: MiniApplet.getBase64FromText(sDatosOriginales, 'default') } else if (paramFirma.iFormato == FORMATO_PADES) { //Firma PAdES params = 'signatureSubFilter=adbe.pkcs7.detached'; params = addParam(params, 'policyIdentifier', paramFirma.sIDPoliticaFirma); params = addParam(params, 'policyIdentifierHash', paramFirma.sResumenPolitica); params = addParam(params, 'policyIdentifierHashAlgorithm', traduceALGPOL_MCF(paramFirma.sAlgResumenPolitica)); params = addParam(params, 'policyQualifier', paramFirma.sURIPolitica); params = addParam(params, 'signaturePage', paramFirma.iPagina); params = addParam(params, 'signaturePositionOnPageLowerLeftX', paramFirma.iEsquinaAbajoIzquierdaX); params = addParam(params, 'signaturePositionOnPageLowerLeftY', paramFirma.iEsquinaAbajoIzquierdaY); params = addParam(params, 'signaturePositionOnPageUpperRightX', paramFirma.iEsquinaArribaDerechaX); params = addParam(params, 'signaturePositionOnPageUpperRightY', paramFirma.iEsquinaArribaDerechaY); params = addParam(params, 'signatureRubricImage', paramFirma.sImagen); params = addParam(params, 'layer2Text', paramFirma.sNombreFirmante); params = addParam(params, 'layer2FontFamily', paramFirma.sFuenteTextoFirma); params = addParam(params, 'layer2FontSize', paramFirma.sTamanioTextoFirma); //params = addParam(params, 'layer2FontStyle', paramFirma.); //params = addParam(params, 'layer2FontColor', paramFirma.); //setTamanioFirma } if (paramFirma.iTipoFMultiple == TIPO_FMULTIPLE_NO) { sDocFirmado = MiniApplet.sign( /* dataB64 */ paramFirma.sDatosAFirmar, /* algorithm */ traduceALG(paramFirma.sAlgoritmoFirma), /* format */ traduceFORMATO(paramFirma), /* params */ params, /* successCallback*/ paramFirma.fCallbackHandlerExito, /* errorCallback*/ paramFirma.fCallbackHandlerError); // LA FIRMA SECUENCIAL NO ESTA SOPORTADA, SE GENERARA A PARTIR DE AHORA COMO FIRMA PARALELA (irá por el else de cosign) //} else if (paramFirma.iTipoFMultiple == TIPO_FMULTIPLE_SECUENCIAL) { // sDocFirmado = MiniApplet.counterSign( // /* signB64 */ paramFirma.sDatosAFirmar, // /* algorithm */ traduceALG(paramFirma.sAlgoritmoFirma), // /* format */ traduceFORMATO(paramFirma), // /* params */ params, // /* successCallback*/ paramFirma.fCallbackHandlerExito, // /* errorCallback*/ paramFirma.fCallbackHandlerError); } else { sDocFirmado = MiniApplet.coSign( /* signB64 */ paramFirma.sDatosAFirmar, /* dataB64 */ paramFirma.sDocOriginal, /* algorithm */ traduceALG(paramFirma.sAlgoritmoFirma), /* format */ traduceFORMATO(paramFirma), /* params */ params, /* successCallback*/ paramFirma.fCallbackHandlerExito, /* errorCallback*/ paramFirma.fCallbackHandlerError); } return sDocFirmado; } /** * Funcion que realiza la firma para el login (Formato PKCS#7 detached con SHA1) y somete el formulario. * * @param {HTML Elem} oTextoAFirmar Elemento HTML donde estan los datos a firmar para hacer el login * @param {HTML Elem} oFirma Elemento HTML donde se dejan los datos firmados para hacer el login * @param {HTML Elem} comboCertificados Combo donde se han cargado los certificados de usuario * @param {HTML Elem} formulario Formulario que debe someterse en el que se encuentra al menos el elemento oFirma con los datos firmados * @deprecated **/ function login(oTextoAFirmar, oFirma, comboCertificados, formulario) { var sSignedData = null; sSignedData = MiniApplet.sign(/* dataB64 */ MiniApplet.getBase64FromText(oTextoAFirmar.value), /* algorithm */ 'SHA1withRSA', /* format */ 'CAdES', /* params */ 'mode=explicit'); if (sSignedData != null) { oFirma.value = sSignedData; formulario.submit(); } else alert("Se ha producido algun error al firmar en la identificación"); } /* * UTILES * */ /** * Metodo auxiliar usado internamente * @private **/ function traduceALG(sAlgoritmo) { /* Algoritmo deprecado, debe utilizar el algoritmo por defecto if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_1) return 'SHA1withRSA';*/ if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_256) return 'SHA256withRSA'; if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_384) return 'SHA384withRSA'; if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_512) return 'SHA512withRSA'; return traduceALG(ALGORITMO_RESUMEN_DEFECTO); } function traduceALGXAdES(sAlgoritmo) { /* Algoritmo deprecado, debe utilizar el algoritmo por defecto if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_1) return 'SHA1withRSA';*/ if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_256) return 'http://www.w3.org/2001/04/xmlenc#sha256'; if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_384) return 'http://www.w3.org/2001/04/xmlenc#sha384'; if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_512) return 'http://www.w3.org/2001/04/xmlenc#sha512'; return traduceALGXAdES(ALGORITMO_RESUMEN_DEFECTO); } /** * Metodo auxiliar usado internamente * @private **/ function traduceALGPOL_MCF(sAlgoritmo) { if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_1) return 'SHA1'; /* Este es el unico sitio donde no depreco el SHA1*/ if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_256) return 'SHA256'; if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_512) return 'SHA512'; return null; } function traduceALGPOL_AUTOSCRIPT(sAlgoritmo) { if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_1) return 'SHA1'; /* Este es el unico sitio donde no depreco el SHA1*/ if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_256) return 'SHA-256'; if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_384) return 'SHA-384'; if (sAlgoritmo == ALGORITMO_RESUMEN_SHA_512) return 'SHA-512'; return null; } /** * Metodo auxiliar usado internamente * @private **/ function traduceFORMATO(paramFirma) { if (paramFirma.iFormato == FORMATO_CADES) if (isIOS()) return 'CAdEStri'; //El cliente de iOS no soporta la firma CAdES, es necesario hacerla trifasica else return 'CAdES'; if (paramFirma.iFormato == FORMATO_XADES) if (paramFirma.sPoliticaFirma == POLITICA_FACTURAE || paramFirma.sIDPoliticaFirma == OID_POLITICA_FACTURAE_v30_XADES || paramFirma.sIDPoliticaFirma == OID_POLITICA_FACTURAE_v31_XADES) return 'FacturaE'; else return 'XAdES'; if (paramFirma.iFormato == FORMATO_PADES) return 'PAdES'; return 'CAdES'; //return traduceALG(FORMATO_DEFECTO); } /** * Metodo auxiliar usado internamente * @private **/ function addParam(params, newParam, value) { if (value != null && value != '') return params + '\n' + newParam + '=' + value; else return params; } /** * Metodo auxiliar usado internamente * @private **/ function getExtensionFichero(paramFirma) { if (typeof(paramFirma) == 'undefined') return 'csig'; if (paramFirma.iFormato == FORMATO_CADES) return 'csig'; if (paramFirma.iFormato == FORMATO_XADES) if (paramFirma.sIDPoliticaFirma == OID_POLITICA_FACTURAE_v30_XADES || paramFirma.sIDPoliticaFirma == OID_POLITICA_FACTURAE_v31_XADES) return 'xml'; else return 'xsig'; if (paramFirma.iFormato == FORMATO_PADES) return 'pdf'; return 'csig'; } /** * Devuelve un fichero mediante cuadro de dialogo en Base64. Depende del cliente de firma se podra especificar el nombre del fichero o no * @public * @deprecated **/ function cargaFichero(nombreFichero) { var fichero = null; fichero = MiniApplet.getFileNameContentBase64(); if (fichero != null) fichero = fichero.substring(fichero.indexOf('|') + 1); return fichero; } /** * Guarda un fichero en disco a partir del fichero en Base64 * @public * @deprecated **/ function guardaFichero(ficheroB64, nombreFichero, paramFirma) { MiniApplet.saveDataToFile(ficheroB64, 'Guardado de fichero', nombreFichero, getExtensionFichero(paramFirma), '', function(param1, param2, param3) { }, function (errorType, errorMessage) {warn("Se produjo un error al guardar el fichero (" + errorType + " - " + errorMessage + ")"); }); } /** * Indica si el componente de firma se carga en forma de applet o no * @private * @deprecated **/ function isApplet() { var tempCliente = document.getElementById("miniApplet"); try { var isApplet = tempCliente != null && tempCliente.echo() != "Cliente JavaScript"; console.log("isApplet: " + isApplet); return isApplet; } catch (e) { console.log("isApplet error: " + e.name + " - " + e.message); return false; } } /** * Indica si el componente de firma se carga en forma de applet o no * @private * @deprecated **/ function isIOS() { return AutoScript.isIOS();; } function warn(literal) { console.log(literal); alert(literal); return null; } /** Determina con un boolean si nos encontramos en Windows XP */ function isWinXP() { return navigator.userAgent.indexOf("Windows NT 5.") != -1; /* Windows XP */ } /* * FIN UTILES * */