Package es.gob.jmulticard
Class CryptoHelper
- java.lang.Object
-
- es.gob.jmulticard.CryptoHelper
-
- Direct Known Subclasses:
BcCryptoHelper
public abstract class CryptoHelper extends java.lang.Object
Funcionalidades criptográficas de utilidad que pueden variar entre JSE/JME/Dalvik.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
CryptoHelper.BlockMode
Tipos de manejo de bloques para cifrado.static class
CryptoHelper.DigestAlgorithm
Algoritmo de huella digital.static class
CryptoHelper.EcCurve
Nombres de curva elíptica.static class
CryptoHelper.PaceChannelHelper
Utilidades para el establecimiento de un canal PACE (Password Authenticated Connection Establishment).static class
CryptoHelper.Padding
Tipos de relleno para cifrados.
-
Field Summary
Fields Modifier and Type Field Description private static byte
PKCS1_BLOCK_TYPE
private static byte
PKCS1_DELIMIT
private static byte
PKCS1_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.X509Certificate
generateCertificate(byte[] encoded)
Genera un certificado a partir de su codificación binaria.abstract java.security.cert.X509Certificate
generateCertificate(java.io.InputStream is)
Genera un certificado a partir de un flujo hacia su codificación binaria.abstract java.security.KeyPair
generateEcKeyPair(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.AlgorithmParameterSpec
getEcPoint(byte[] nonceS, byte[] sharedSecretH, CryptoHelper.EcCurve curveName)
Obtiene un punto en una curva elíptica.abstract CryptoHelper.PaceChannelHelper
getPaceChannelHelper()
Obtiene las utilidades para el establecimiento de un canal PACE (Password Authenticated Connection Establishment).abstract java.security.interfaces.RSAPublicKey
getRsaPublicKey(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.IOException
Añ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.IOException
Encripta 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.IOException
Desencripta 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.IOException
Encripta 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.IOException
Desencripta 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.IOException
Desencripta datos mediante AES.- Parameters:
data
- Datos a encriptar.iv
- Vector de inicialización. Si se proporcionanull
se 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.IOException
Encripta datos mediante AES.- Parameters:
data
- Datos a encriptar.iv
- Vector de inicialización. Si se proporcionanull
se 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.IOException
Desencripta 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.IOException
Encripta 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.IOException
Genera 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.InvalidKeyException
Realiza 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.IOException
Obtiene 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.CertificateException
Valida 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.CertificateException
Genera 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.CertificateException
Genera 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 BigInteger
en 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
-
-