Class 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.
    • 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.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • CryptoHelper

        public CryptoHelper()
    • 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 proporciona null 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 proporciona null 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 al del 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