Package es.gob.jmulticard
Class CryptoHelper
- java.lang.Object
-
- es.gob.jmulticard.CryptoHelper
-
- Direct Known Subclasses:
BcCryptoHelper
public abstract class CryptoHelper extends java.lang.ObjectFuncionalidades criptográficas de utilidad que pueden variar entre JSE/JME/Dalvik.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classCryptoHelper.BlockModeTipos de manejo de bloques para cifrado.static classCryptoHelper.DigestAlgorithmAlgoritmo de huella digital.static classCryptoHelper.EcCurveNombres de curva elíptica.static classCryptoHelper.PaceChannelHelperUtilidades para el establecimiento de un canal PACE (Password Authenticated Connection Establishment).static classCryptoHelper.PaddingTipos de relleno para cifrados.
-
Field Summary
Fields Modifier and Type Field Description private static bytePKCS1_BLOCK_TYPEprivate static bytePKCS1_DELIMITprivate static bytePKCS1_FILL
-
Constructor Summary
Constructors Constructor Description CryptoHelper()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static byte[]addPkcs1PaddingForPrivateKeyOperation(byte[] inByteArray, int keySize)Añade relleno PKCS#1 para operaciones con clave privada.abstract byte[]aesDecrypt(byte[] data, byte[] iv, byte[] key, CryptoHelper.BlockMode blockMode, CryptoHelper.Padding padding)Desencripta datos mediante AES.abstract byte[]aesEncrypt(byte[] data, byte[] iv, byte[] key, CryptoHelper.BlockMode blockMode, CryptoHelper.Padding padding)Encripta datos mediante AES.abstract byte[]desDecrypt(byte[] data, byte[] key)Desencripta datos mediante DES (modo ECB sin relleno).abstract byte[]desedeDecrypt(byte[] data, byte[] key)Desencripta datos mediante Triple DES (modo CBC sin relleno) y con una semilla (IV) de 8 bytes establecidos a cero.abstract byte[]desedeEncrypt(byte[] data, byte[] key)Encripta datos mediante Triple DES (modo CBC sin relleno) y con una semilla (IV) de 8 bytes establecidos a cero.abstract byte[]desEncrypt(byte[] data, byte[] key)Encripta datos mediante DES (modo ECB sin relleno).abstract byte[]digest(CryptoHelper.DigestAlgorithm algorithm, byte[] data)Realiza una huella digital de los datos proporcionados.abstract byte[]doAesCmac(byte[] data, byte[] key)Realiza un CMAC con AES.abstract java.security.cert.X509CertificategenerateCertificate(byte[] encoded)Genera un certificado a partir de su codificación binaria.abstract java.security.cert.X509CertificategenerateCertificate(java.io.InputStream is)Genera un certificado a partir de un flujo hacia su codificación binaria.abstract java.security.KeyPairgenerateEcKeyPair(CryptoHelper.EcCurve curveName)Genera un par de claves de tipo curva elíptica.abstract byte[]generateRandomBytes(int numBytes)Genera contenido aleatorio en un array de bytes.abstract byte[]getCmsSignatureSignedContent(byte[] signedDataBytes)Obtiene el contenido firmado de una firma CMS/PKCS#7.abstract java.security.spec.AlgorithmParameterSpecgetEcPoint(byte[] nonceS, byte[] sharedSecretH, CryptoHelper.EcCurve curveName)Obtiene un punto en una curva elíptica.abstract CryptoHelper.PaceChannelHelpergetPaceChannelHelper()Obtiene las utilidades para el establecimiento de un canal PACE (Password Authenticated Connection Establishment).abstract java.security.interfaces.RSAPublicKeygetRsaPublicKey(java.security.cert.X509Certificate cert)Obtiene una clave pública de un certificado.abstract byte[]rsaDecrypt(byte[] cipheredData, java.security.interfaces.RSAKey key)Desencripta datos mediante RSA.abstract byte[]rsaEncrypt(byte[] data, java.security.interfaces.RSAKey key)Encripta datos mediante RSA.abstract java.security.cert.X509Certificate[]validateCmsSignature(byte[] signedDataBytes)Valida una firma CMS/PKCS#7.
-
-
-
Field Detail
-
PKCS1_BLOCK_TYPE
private static final byte PKCS1_BLOCK_TYPE
- See Also:
- Constant Field Values
-
PKCS1_FILL
private static final byte PKCS1_FILL
- See Also:
- Constant Field Values
-
PKCS1_DELIMIT
private static final byte PKCS1_DELIMIT
- See Also:
- Constant Field Values
-
-
Method Detail
-
addPkcs1PaddingForPrivateKeyOperation
public static final byte[] addPkcs1PaddingForPrivateKeyOperation(byte[] inByteArray, int keySize) throws java.io.IOExceptionAñade relleno PKCS#1 para operaciones con clave privada.- Parameters:
inByteArray- Datos a los que se quiere añadir relleno PKCS#1.keySize- Tamaño de la clave privada que operará posteriormente con estos datos con relleno.- Returns:
- Datos con el relleno PKCS#1 añadido.
- Throws:
java.io.IOException- En caso de error el el tratamiento de datos.
-
digest
public abstract byte[] digest(CryptoHelper.DigestAlgorithm algorithm, byte[] data) throws java.io.IOException
Realiza una huella digital de los datos proporcionados.- Parameters:
algorithm- Algoritmo de huella digital que debe utilizarse.data- Datos de entrada.- Returns:
- Huella digital de los datos.
- Throws:
java.io.IOException- Si ocurre algún problema generando la huella digital.
-
desedeEncrypt
public abstract byte[] desedeEncrypt(byte[] data, byte[] key) throws java.io.IOExceptionEncripta datos mediante Triple DES (modo CBC sin relleno) y con una semilla (IV) de 8 bytes establecidos a cero. Si se le indica una clave de 24 bytes, la utilizaráa tal cual. Si se le indica una clave de 16 bytes, duplicará los 8 primeros y los agregará al final para obtener una de 24.- Parameters:
data- Datos a encriptar.key- Clave 3DES de cifrado.- Returns:
- Datos cifrados.
- Throws:
java.io.IOException- Si ocurre algún problema durante el encriptado.
-
desedeDecrypt
public abstract byte[] desedeDecrypt(byte[] data, byte[] key) throws java.io.IOExceptionDesencripta datos mediante Triple DES (modo CBC sin relleno) y con una semilla (IV) de 8 bytes establecidos a cero. Si se le indica una clave de 24 bytes, la utilizaráa tal cual. Si se le indica una clave de 16 bytes, duplicará los 8 primeros y los agregará al final para obtener una de 24.- Parameters:
data- Datos a desencriptar.key- Clave 3DES de descifrado.- Returns:
- Datos descifrados.
- Throws:
java.io.IOException- Si ocurre algún problema durante el desencriptado.
-
desEncrypt
public abstract byte[] desEncrypt(byte[] data, byte[] key) throws java.io.IOExceptionEncripta datos mediante DES (modo ECB sin relleno).- Parameters:
data- Datos a encriptar.key- Clave DES de cifrado.- Returns:
- Datos cifrados.
- Throws:
java.io.IOException- Si ocurre algún problema durante el encriptado.
-
desDecrypt
public abstract byte[] desDecrypt(byte[] data, byte[] key) throws java.io.IOExceptionDesencripta datos mediante DES (modo ECB sin relleno).- Parameters:
data- Datos a desencriptar.key- Clave DES de descifrado.- Returns:
- Datos descifrados.
- Throws:
java.io.IOException- Si ocurre algún problema durante el desencriptado.
-
aesDecrypt
public abstract byte[] aesDecrypt(byte[] data, byte[] iv, byte[] key, CryptoHelper.BlockMode blockMode, CryptoHelper.Padding padding) throws java.io.IOExceptionDesencripta datos mediante AES.- Parameters:
data- Datos a encriptar.iv- Vector de inicialización. Si se proporcionanullse usará un vector con valores aleatorios.key- Clave AES de cifrado.blockMode- Modo de gestión de bloques.padding- Relleno a usar en los datos de entrada.- Returns:
- Datos cifrados.
- Throws:
java.io.IOException- Si ocurre algún problema durante el encriptado.
-
aesEncrypt
public abstract byte[] aesEncrypt(byte[] data, byte[] iv, byte[] key, CryptoHelper.BlockMode blockMode, CryptoHelper.Padding padding) throws java.io.IOExceptionEncripta datos mediante AES.- Parameters:
data- Datos a encriptar.iv- Vector de inicialización. Si se proporcionanullse usará un vector con valores aleatorios.key- Clave AES de cifrado.blockMode- Modo de gestión de bloques.padding- Relleno a usar en los datos de entrada.- Returns:
- Datos cifrados.
- Throws:
java.io.IOException- Si ocurre algún problema durante el encriptado.
-
rsaDecrypt
public abstract byte[] rsaDecrypt(byte[] cipheredData, java.security.interfaces.RSAKey key) throws java.io.IOExceptionDesencripta datos mediante RSA.- Parameters:
cipheredData- Datos a desencriptar.key- Clava RSA de descifrado.- Returns:
- Datos descifrados.
- Throws:
java.io.IOException- Si ocurre algún problema durante el desencriptado.
-
rsaEncrypt
public abstract byte[] rsaEncrypt(byte[] data, java.security.interfaces.RSAKey key) throws java.io.IOExceptionEncripta datos mediante RSA.- Parameters:
data- Datos a encriptar.key- Clava RSA de cifrado.- Returns:
- Datos encriptados.
- Throws:
java.io.IOException- Si ocurre algún problema durante el encriptado.
-
generateRandomBytes
public abstract byte[] generateRandomBytes(int numBytes) throws java.io.IOExceptionGenera contenido aleatorio en un array de bytes.- Parameters:
numBytes- Número de bytes aleatorios que generar.- Returns:
- Array de bytes aleatorios.
- Throws:
java.io.IOException- Si ocurre algún problema durante la generación del aleatorio.
-
generateEcKeyPair
public abstract java.security.KeyPair generateEcKeyPair(CryptoHelper.EcCurve curveName) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException
Genera un par de claves de tipo curva elíptica.- Parameters:
curveName- Tipo de curva elíptica a utilizar.- Returns:
- Par de claves generadas.
- Throws:
java.security.NoSuchAlgorithmException- Si el sistema no soporta la generación de curvas elípticas.java.security.InvalidAlgorithmParameterException- Si el sistema no soporta el tipo de curva elíptica indicada.
-
doAesCmac
public abstract byte[] doAesCmac(byte[] data, byte[] key) throws java.security.NoSuchAlgorithmException, java.security.InvalidKeyExceptionRealiza un CMAC con AES.- Parameters:
data- Datos (deben estar ya con el relleno adecuado).key- Clave AES.- Returns:
- CMAC.
- Throws:
java.security.NoSuchAlgorithmException- Si no se encuentra un proveedor que permita realizar CMAC con AES.java.security.InvalidKeyException- Si la clave proporcionada no es una clave AES válida.
-
getEcPoint
public abstract java.security.spec.AlgorithmParameterSpec getEcPoint(byte[] nonceS, byte[] sharedSecretH, CryptoHelper.EcCurve curveName)Obtiene un punto en una curva elíptica.- Parameters:
nonceS- Aleatorio de un solo uso.sharedSecretH- Secreto compartido.curveName- Nombre de la curva.- Returns:
- Punto encapsulado.
-
getCmsSignatureSignedContent
public abstract byte[] getCmsSignatureSignedContent(byte[] signedDataBytes) throws java.io.IOExceptionObtiene el contenido firmado de una firma CMS/PKCS#7.- Parameters:
signedDataBytes- Firma CMS/PKCS#7.- Returns:
- Contenido firmado de una firma CMS/PKCS#7.
- Throws:
java.io.IOException- Si los datos proporcionados no son una firma CMS/PKCS#7 bien formada.
-
validateCmsSignature
public abstract java.security.cert.X509Certificate[] validateCmsSignature(byte[] signedDataBytes) throws java.security.SignatureException, java.io.IOException, java.security.cert.CertificateExceptionValida una firma CMS/PKCS#7. No comprueba la validez de los certificados de firma.- Parameters:
signedDataBytes- Firma CMS/PKCS#7.- Returns:
- Cadena de certificados del firmante (para validación externa).
- Throws:
java.security.SignatureException- Si la firma es inválida o está mal formada.java.io.IOException- Si los datos proporcionados no son una firma CMS/PKCS#7 bien formada.java.security.cert.CertificateException- Si hay problemas relacionados con los certificados de firma.
-
generateCertificate
public abstract java.security.cert.X509Certificate generateCertificate(byte[] encoded) throws java.security.cert.CertificateExceptionGenera un certificado a partir de su codificación binaria.- Parameters:
encoded- Codificación binaria del certificado.- Returns:
- Certificado.
- Throws:
java.security.cert.CertificateException- Si la codificación binaria no correspondía a un certificado.
-
generateCertificate
public abstract java.security.cert.X509Certificate generateCertificate(java.io.InputStream is) throws java.security.cert.CertificateExceptionGenera un certificado a partir de un flujo hacia su codificación binaria.- Parameters:
is- Flujo de lectura hacia la Codificación binaria del certificado.- Returns:
- Certificado.
- Throws:
java.security.cert.CertificateException- Si la codificación binaria no correspondía a un certificado o no se pudo leer del flujo de entrada.
-
getRsaPublicKey
public abstract java.security.interfaces.RSAPublicKey getRsaPublicKey(java.security.cert.X509Certificate cert)
Obtiene una clave pública de un certificado. La razón de tener este método en vez de invocar directamente aldel certificado es evitar problemas por la interpretaci&oaccute;n del signo del BigIntegeren ciertos entornos (como J2Obc).- Parameters:
cert- Certificado de origen.- Returns:
- Clave pública RSA del certificado.
-
getPaceChannelHelper
public abstract CryptoHelper.PaceChannelHelper getPaceChannelHelper()
Obtiene las utilidades para el establecimiento de un canal PACE (Password Authenticated Connection Establishment).- Returns:
- Utilidades para el establecimiento de un canal PACE
-
-