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 * */