Class CryptoHelper

java.lang.Object
es.gob.jmulticard.CryptoHelper
Direct Known Subclasses:
BcCryptoHelper

public abstract class CryptoHelper extends Object
Funcionalidades criptográficas de utilidad que pueden variar entre JSE/JME/Dalvik.
  • Field Details

  • Constructor Details

    • CryptoHelper

      public CryptoHelper()
  • Method Details

    • addPkcs1PaddingForPrivateKeyOperation

      public static final byte[] addPkcs1PaddingForPrivateKeyOperation(byte[] inByteArray, int keySize) throws 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:
      IOException - En caso de error el el tratamiento de datos.
    • digest

      public abstract byte[] digest(CryptoHelper.DigestAlgorithm algorithm, byte[] data) throws 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:
      IOException - Si ocurre algún problema generando la huella digital.
    • desedeEncrypt

      public abstract byte[] desedeEncrypt(byte[] data, byte[] key) throws 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:
      IOException - Si ocurre algún problema durante el encriptado.
    • desedeDecrypt

      public abstract byte[] desedeDecrypt(byte[] data, byte[] key) throws 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:
      IOException - Si ocurre algún problema durante el desencriptado.
    • desEncrypt

      public abstract byte[] desEncrypt(byte[] data, byte[] key) throws IOException
      Encripta datos mediante DES (modo ECB sin relleno).
      Parameters:
      data - Datos a encriptar.
      key - Clave DES de cifrado.
      Returns:
      Datos cifrados.
      Throws:
      IOException - Si ocurre algún problema durante el encriptado.
    • desDecrypt

      public abstract byte[] desDecrypt(byte[] data, byte[] key) throws IOException
      Desencripta datos mediante DES (modo ECB sin relleno).
      Parameters:
      data - Datos a desencriptar.
      key - Clave DES de descifrado.
      Returns:
      Datos descifrados.
      Throws:
      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 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:
      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 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:
      IOException - Si ocurre algún problema durante el encriptado.
    • rsaDecrypt

      public abstract byte[] rsaDecrypt(byte[] cipheredData, RSAKey key) throws IOException
      Desencripta datos mediante RSA.
      Parameters:
      cipheredData - Datos a desencriptar.
      key - Clava RSA de descifrado.
      Returns:
      Datos descifrados.
      Throws:
      IOException - Si ocurre algún problema durante el desencriptado.
    • rsaEncrypt

      public abstract byte[] rsaEncrypt(byte[] data, RSAKey key) throws IOException
      Encripta datos mediante RSA.
      Parameters:
      data - Datos a encriptar.
      key - Clava RSA de cifrado.
      Returns:
      Datos encriptados.
      Throws:
      IOException - Si ocurre algún problema durante el encriptado.
    • generateRandomBytes

      public abstract byte[] generateRandomBytes(int numBytes) throws IOException
      Genera contenido aleatorio en un array de bytes.
      Parameters:
      numBytes - Número de bytes aleatorios que generar.
      Returns:
      Array de bytes aleatorios.
      Throws:
      IOException - Si ocurre algún problema durante la generación del aleatorio.
    • generateEcKeyPair

      public abstract KeyPair generateEcKeyPair(CryptoHelper.EcCurve curveName) throws NoSuchAlgorithmException, 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:
      NoSuchAlgorithmException - Si el sistema no soporta la generación de curvas elípticas.
      InvalidAlgorithmParameterException - Si el sistema no soporta el tipo de curva elíptica indicada.
    • doAesCmac

      public abstract byte[] doAesCmac(byte[] data, byte[] key) throws NoSuchAlgorithmException, InvalidKeyException
      Realiza un CMAC con AES.
      Parameters:
      data - Datos (deben estar ya con el relleno adecuado).
      key - Clave AES.
      Returns:
      CMAC.
      Throws:
      NoSuchAlgorithmException - Si no se encuentra un proveedor que permita realizar CMAC con AES.
      InvalidKeyException - Si la clave proporcionada no es una clave AES válida.
    • getEcPoint

      public abstract 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 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:
      IOException - Si los datos proporcionados no son una firma CMS/PKCS#7 bien formada.
    • validateCmsSignature

      public abstract X509Certificate[] validateCmsSignature(byte[] signedDataBytes) throws SignatureException, IOException, 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:
      SignatureException - Si la firma es inválida o está mal formada.
      IOException - Si los datos proporcionados no son una firma CMS/PKCS#7 bien formada.
      CertificateException - Si hay problemas relacionados con los certificados de firma.
    • generateCertificate

      public abstract X509Certificate generateCertificate(byte[] encoded) throws CertificateException
      Genera un certificado a partir de su codificación binaria.
      Parameters:
      encoded - Codificación binaria del certificado.
      Returns:
      Certificado.
      Throws:
      CertificateException - Si la codificación binaria no correspondía a un certificado.
    • generateCertificate

      public abstract X509Certificate generateCertificate(InputStream is) throws 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:
      CertificateException - Si la codificación binaria no correspondía a un certificado o no se pudo leer del flujo de entrada.
    • getRsaPublicKey

      public abstract RSAPublicKey getRsaPublicKey(X509Certificate cert)
      Obtiene una clave pública de un certificado. La razón de tener este método en vez de invocar directamente al invalid input: '<'getPublicKey() 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