All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.rubrica.sign.SignConstants Maven / Gradle / Ivy

/*
 * Copyright 2009-2017 Rubrica
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see .
 */

package io.rubrica.sign;

import java.util.Locale;

/** Constantes relativas a las firmas digitales. */
public final class SignConstants {

	// ************************************************************
	// ************* FORMATOS DE FIRMA*****************************
	// ************************************************************

	/**
	 * Identificador del formato de firma seleccionado automáticamente.
	 */
	public static final String SIGN_FORMAT_AUTO = "auto";

	/** Identificador de la firma CMS. */
	public static final String SIGN_FORMAT_CMS = "CMS/PKCS#7";

	/** Identificador de la firma CAdES ASiC-S. */
	public static final String SIGN_FORMAT_CADES_ASIC_S = "CAdES-ASiC-S";

	/** Identificador de la firma CAdES ASiC-S trifásica. */
	public static final String SIGN_FORMAT_CADES_ASIC_S_TRI = "CAdES-ASiC-S-tri";

	/** Identificador de la firma CAdES. */
	public static final String SIGN_FORMAT_CADES = "CAdES";

	/** Identificador de la firma CAdES trifásica. */
	public static final String SIGN_FORMAT_CADES_TRI = "CAdEStri";

	/** Identificador de la firma PKCS1 (RAW). */
	public static final String SIGN_FORMAT_PKCS1 = "NONE";

	/** Identificador de la firma XAdES-ASiC-S. */
	public static final String SIGN_FORMAT_XADES_ASIC_S = "XAdES-ASiC-S";

	/** Identificador de la firma XAdES-ASiC-S trifásica. */
	public static final String SIGN_FORMAT_XADES_ASIC_S_TRI = "XAdES-ASiC-S-tri";

	/** Identificador de la firma XAdES Internally Detached. */
	public static final String SIGN_FORMAT_XADES_DETACHED = "XAdES Detached";

	/** Identificador de la firma XAdES Externally Detached. */
	public static final String SIGN_FORMAT_XADES_EXTERNALLY_DETACHED = "XAdES Externally Detached";

	/** Identificador de la firma XAdES Enveloped. */
	public static final String SIGN_FORMAT_XADES_ENVELOPED = "XAdES Enveloped";

	/** Identificador de la firma XAdES Enveloping. */
	public static final String SIGN_FORMAT_XADES_ENVELOPING = "XAdES Enveloping";

	/** Identificador de la firma XAdES por defecto. */
	public static final String SIGN_FORMAT_XADES = "XAdES";

	/** Identificador de la firma XAdES trifásica. */
	public static final String SIGN_FORMAT_XADES_TRI = "XAdEStri";

	/** Identificador de la firma XMLDsig Detached. */
	public static final String SIGN_FORMAT_XMLDSIG_DETACHED = "XMLDSig Detached";

	/** Identificador de la firma XMLdSig Externally Detached. */
	public static final String SIGN_FORMAT_XMLDSIG_EXTERNALLY_DETACHED = "XMLDSig Externally Detached";

	/** Identificador de la firma XMLDsig Enveloped. */
	public static final String SIGN_FORMAT_XMLDSIG_ENVELOPED = "XMLDSig Enveloped";

	/** Identificador de la firma XMLDsig Enveloping. */
	public static final String SIGN_FORMAT_XMLDSIG_ENVELOPING = "XMLDSig Enveloping";

	/** Identificador de la firma XMLDSig (XML Digital Signature). */
	public static final String SIGN_FORMAT_XMLDSIG = "XMLDSig";

	/** Identificador de la firma OOXML (Office Open XML). */
	public static final String SIGN_FORMAT_OOXML = "OOXML (Office Open XML)";

	/** Identificador alternativo número 1 para el formato OOXML. */
	public static final String SIGN_FORMAT_OOXML_ALT1 = "OOXML";

	/** Identificador de la firma ODF (Open Document Format). */
	public static final String SIGN_FORMAT_ODF = "ODF (Open Document Format)";

	/** Identificador alternativo número 1 para el formato ODF. */
	public static final String SIGN_FORMAT_ODF_ALT1 = "ODF";

	/** Identificador de la firma Adobe PDF. */
	public static final String SIGN_FORMAT_PDF = "Adobe PDF";

	/** Identificador de la firma Adobe PDF trifásica. */
	public static final String SIGN_FORMAT_PDF_TRI = "Adobe PDF TriPhase";

	/** Identificador de la firma PAdES. */
	public static final String SIGN_FORMAT_PADES = "PAdES";

	/** Identificador de la firma PAdES trifásica. */
	public static final String SIGN_FORMAT_PADES_TRI = "PAdEStri";

	/** Identificador de la firma SOAP. */
	public static final String SIGN_FORMAT_SOAP = "SOAP";

	/** Identificador de la firma Factura-e (derivado de XAdES-EPES). */
	public static final String SIGN_FORMAT_FACTURAE = "FacturaE";

	/**
	 * Identificador de la firma Factura-e (derivado de XAdES-EPES)
	 * trifásica.
	 */
	public static final String SIGN_FORMAT_FACTURAE_TRI = "FacturaEtri";

	/**
	 * Identificador alternativo de la firma Factura-e (derivado de XAdES-EPES).
	 */
	public static final String SIGN_FORMAT_FACTURAE_ALT1 = "Factura-e";

	/** Formato de firma por defecto. */
	public static final String DEFAULT_SIGN_FORMAT = SIGN_FORMAT_CADES;

	// ************************************************************
	// ************* OPERACIONES **********************************
	// ************************************************************

	/** Identificador de la operación de firma masiva. */
	public static final String MASSIVE_OPERATION_SIGN = "FIRMAR";

	/** Identificador de la operación de cofirma masiva. */
	public static final String MASSIVE_OPERATION_COSIGN = "COFIRMAR";

	/**
	 * Identificador de la operación de contrafirma masiva de todo el
	 * árbol de firma.
	 */
	public static final String MASSIVE_OPERATION_COUNTERSIGN_TREE = "CONTRAFIRMAR_ARBOL";

	/**
	 * Identificador de la operación de contrafirma masiva de nodos hoja
	 * de firma.
	 */
	public static final String MASSIVE_OPERATION_COUNTERSIGN_LEAFS = "CONTRAFIRMAR_HOJAS";

	/** Operación masiva por defecto. */
	public static final String DEFAULT_MASSIVE_OPERATION = MASSIVE_OPERATION_SIGN;

	/**
	 * Envoltorio binario de tipo Data (datos envueltos en un envoltorio
	 * PKCS#7).
	 */
	public static final String CMS_CONTENTTYPE_DATA = "Data";

	/** Firma binaria de tipo Signed Data */
	public static final String CMS_CONTENTTYPE_SIGNEDDATA = "SignedData";

	/** Envoltorio binario de tipo Digest. */
	public static final String CMS_CONTENTTYPE_DIGESTEDDATA = "DigestedData";

	/** Envoltorio binario de tipo AuthenticatedEnvelopedData. */
	public static final String CMS_CONTENTTYPE_COMPRESSEDDATA = "CompressedData";

	/** Firma binaria de tipo Encrypted Data */
	public static final String CMS_CONTENTTYPE_ENCRYPTEDDATA = "EncryptedData";

	/** Envoltorio binario de tipo Enveloped (sobre digital). */
	public static final String CMS_CONTENTTYPE_ENVELOPEDDATA = "EnvelopedData";

	/** Envoltorio binario de tipo Signed and Enveloped. */
	public static final String CMS_CONTENTTYPE_SIGNEDANDENVELOPEDDATA = "SignedAndEnvelopedData";

	/** Envoltorio binario de tipo AuthenticatedData. */
	public static final String CMS_CONTENTTYPE_AUTHENTICATEDDATA = "AuthenticatedData";

	/** Envoltorio binario de tipo AuthenticatedEnvelopedData. */
	public static final String CMS_CONTENTTYPE_AUTHENVELOPEDDATA = "AuthEnvelopedData";

	/** Envoltorio binario por defecto. */
	public static final String DEFAULT_CMS_CONTENTTYPE = CMS_CONTENTTYPE_ENVELOPEDDATA;

	/** OID por defecto para los datos firmados. */
	public static final String DEFAULT_OID_TO_SIGN = "1.3.6.1.4.1.1466.115.121.1.40"; // Octect

	// ************************************************************
	// ******************** SUBFILTROS PDF ************************
	// ************************************************************

	/** Filtro para firma PAdES-Básico. */
	public static final String PADES_SUBFILTER_BASIC = "adbe.pkcs7.detached";

	/** Filtro para firma PAdES-BES. */
	public static final String PADES_SUBFILTER_BES = "ETSI.CAdES.detached";

	// ************************************************************
	// ************* ALGORITMOS DE FIRMA **************************
	// ************************************************************

	/** Algoritmo de firma SHA1withRSA. */
	public static final String SIGN_ALGORITHM_SHA1WITHRSA = "SHA1withRSA";

	/** Algoritmo de firma SHA256withRSA. */
	public static final String SIGN_ALGORITHM_SHA256WITHRSA = "SHA256withRSA";

	/** Algoritmo de firma SHA384withRSA. */
	public static final String SIGN_ALGORITHM_SHA384WITHRSA = "SHA384withRSA";

	/** Algoritmo de firma SHA512withRSA. */
	public static final String SIGN_ALGORITHM_SHA512WITHRSA = "SHA512withRSA";

	/**
	 * Algoritmo de firma RSA que no incluye la generación de la huella
	 * digital (NONEwithRSA).
	 */
	public static final String SIGN_ALGORITHM_NONEWITHRSA = "NONEwithRSA";

	/** Algoritmo de firma SHA1withDSA. */
	public static final String SIGN_ALGORITHM_SHA1WITHDSA = "SHA1withDSA";

	/** Algoritmo de firma SHA1withECDSA. */
	public static final String SIGN_ALGORITHM_SHA1WITHECDSA = "SHA1withECDSA";

	/**
	 * Algoritmo de firma ECDSA que no incluye la generación de la huella
	 * digital (NONEwithEDSSA).
	 */
	public static final String SIGN_ALGORITHM_NONEWITHECDSA = "NONEwithECDSA";

	/** Algoritmos de firma soportados. */
	public static final String[] SUPPORTED_SIGN_ALGOS = new String[] { SIGN_ALGORITHM_SHA1WITHRSA,
			SIGN_ALGORITHM_NONEWITHRSA, SIGN_ALGORITHM_SHA256WITHRSA, SIGN_ALGORITHM_SHA384WITHRSA,
			SIGN_ALGORITHM_SHA512WITHRSA, SIGN_ALGORITHM_SHA1WITHECDSA, SIGN_ALGORITHM_NONEWITHECDSA };

	/** Algoritmo de firma por defecto. */
	public static final String DEFAULT_SIGN_ALGO = SIGN_ALGORITHM_SHA512WITHRSA;

	// ************************************************************
	// ****************** MODOS DE FIRMA **************************
	// ************************************************************

	/**
	 * Identificador del modo de firma Explicita (Los datos NO se incluyen en la
	 * firma).
	 */
	public static final String SIGN_MODE_EXPLICIT = "explicit";

	/**
	 * Identificador del modo de firma Implicita (Los datos SI se incluyen en la
	 * firma).
	 */
	public static final String SIGN_MODE_IMPLICIT = "implicit";

	/** Modo de firma por defecto. */
	public static final String DEFAULT_SIGN_MODE = SIGN_MODE_EXPLICIT;

	private SignConstants() {
		// No permitimos la instanciacion
	}

	/**
	 * Obtiene el nombre de un algoritmo de huella digital a partir de una de
	 * las variantes de este.
	 * 
	 * @param pseudoName
	 *            Nombre o variante del nombre del algoritmo de huella digital
	 * @return Nombre del algoritmo de huella digital
	 */
	public static String getDigestAlgorithmName(final String pseudoName) {
		if (pseudoName == null) {
			throw new IllegalArgumentException("El nombre del algoritmo de huella digital no puede ser nulo");
		}
		final String upperPseudoName = pseudoName.toUpperCase(Locale.US);
		if (upperPseudoName.equals("SHA")
				|| upperPseudoName.equals("http://www.w3.org/2000/09/xmldsig#sha1".toUpperCase(Locale.US))
				|| upperPseudoName.equals("1.3.14.3.2.26") || upperPseudoName.startsWith("SHA1")
				|| upperPseudoName.startsWith("SHA-1")) {
			return "SHA1";
		}

		if (upperPseudoName.equals("http://www.w3.org/2001/04/xmlenc#sha256".toUpperCase(Locale.US))
				|| upperPseudoName.equals("2.16.840.1.101.3.4.2.1") || upperPseudoName.startsWith("SHA256")
				|| upperPseudoName.startsWith("SHA-256")) {
			return "SHA-256";
		}

		if (upperPseudoName.startsWith("SHA384") || upperPseudoName.equals("2.16.840.1.101.3.4.2.2")
				|| upperPseudoName.startsWith("SHA-384")) {
			return "SHA-384";
		}

		if (upperPseudoName.equals("http://www.w3.org/2001/04/xmlenc#sha512".toUpperCase(Locale.US))
				|| upperPseudoName.equals("2.16.840.1.101.3.4.2.3") || upperPseudoName.startsWith("SHA512")
				|| upperPseudoName.startsWith("SHA-512")) {
			return "SHA-512";
		}

		if (upperPseudoName.equals("http://www.w3.org/2001/04/xmlenc#ripemd160".toUpperCase(Locale.US))
				|| upperPseudoName.startsWith("RIPEMD160") || upperPseudoName.startsWith("RIPEMD-160")) {
			return "RIPEMD160";
		}

		throw new IllegalArgumentException("Algoritmo de huella digital no soportado: " + pseudoName);
	}

	/**
	 * Comprueba si un algoritmo de firma utiliza un algoritmo de huella digital
	 * perteneciente a la familia de algoritmos SHA2.
	 * 
	 * @param algorithm
	 *            Algoritmo de firma.
	 * @return {@code true} cuando el algoritmo es un SHA2, {@code false} en
	 *         caso contrario.
	 */
	public static boolean isSHA2SignatureAlgorithm(final String algorithm) {
		return SIGN_ALGORITHM_SHA256WITHRSA.equals(algorithm) || SIGN_ALGORITHM_SHA384WITHRSA.equals(algorithm)
				|| SIGN_ALGORITHM_SHA512WITHRSA.equals(algorithm);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy