Class DirectDecrypter

All Implemented Interfaces:
CriticalHeaderParamsAware, JCAAware<JWEJCAContext>, JOSEProvider, JWEDecrypter, JWEProvider

@ThreadSafe public class DirectDecrypter extends DirectCryptoProvider implements JWEDecrypter, CriticalHeaderParamsAware
Direct decrypter of JWE objects with a shared symmetric key.

See RFC 7518 section 4.5 for more information.

This class is thread-safe.

Supports the following key management algorithms:

Supports the following content encryption algorithms:

Also supports a promiscuous mode to decrypt any JWE by passing the content encryption key (CEK) directly. The that mode the JWE algorithm checks for ("alg":"dir") and encrypted key not being present will be skipped.

Version:
2023-09-10
Author:
Vladimir Dzhuvinov, Egor Puzanov
  • Constructor Details

    • DirectDecrypter

      Creates a new direct decrypter.
      Parameters:
      key - The symmetric key. Its algorithm should be "AES". Must be 128 bits (16 bytes), 192 bits (24 bytes), 256 bits (32 bytes), 384 bits (48 bytes) or 512 bits (64 bytes) long. Must not be null.
      Throws:
      KeyLengthException - If the symmetric key length is not compatible.
    • DirectDecrypter

      public DirectDecrypter(SecretKey key, boolean promiscuousMode) throws KeyLengthException
      Creates a new direct decrypter with the option to set it in promiscuous mode.
      Parameters:
      key - The symmetric key. Its algorithm should be "AES". Must be 128 bits (16 bytes), 192 bits (24 bytes), 256 bits (32 bytes), 384 bits (48 bytes) or 512 bits (64 bytes) long. Must not be null.
      promiscuousMode - If true set the decrypter in promiscuous mode to permit decryption of any JWE with the supplied symmetric key. The that mode the JWE algorithm checks for ("alg":"dir") and encrypted key not being present will be skipped.
      Throws:
      KeyLengthException - If the symmetric key length is not compatible.
    • DirectDecrypter

      public DirectDecrypter(byte[] keyBytes) throws KeyLengthException
      Creates a new direct decrypter.
      Parameters:
      keyBytes - The symmetric key, as a byte array. Must be 128 bits (16 bytes), 192 bits (24 bytes), 256 bits (32 bytes), 384 bits (48 bytes) or 512 bits (64 bytes) long. Must not be null.
      Throws:
      KeyLengthException - If the symmetric key length is not compatible.
    • DirectDecrypter

      Creates a new direct decrypter.
      Parameters:
      octJWK - The symmetric key, as a JWK. Must be 128 bits (16 bytes), 192 bits (24 bytes), 256 bits (32 bytes), 384 bits (48 bytes) or 512 bits (64 bytes) long. Must not be null.
      Throws:
      KeyLengthException - If the symmetric key length is not compatible.
    • DirectDecrypter

      public DirectDecrypter(SecretKey key, Set<String> defCritHeaders) throws KeyLengthException
      Creates a new direct decrypter with the option to set it in promiscuous mode.
      Parameters:
      key - The symmetric key. Its algorithm should be "AES". Must be 128 bits (16 bytes), 192 bits (24 bytes), 256 bits (32 bytes), 384 bits (48 bytes) or 512 bits (64 bytes) long. Must not be null.
      defCritHeaders - The names of the critical header parameters that are deferred to the application for processing, empty set or null if none.
      Throws:
      KeyLengthException - If the symmetric key length is not compatible.
    • DirectDecrypter

      public DirectDecrypter(SecretKey key, Set<String> defCritHeaders, boolean promiscuousMode) throws KeyLengthException
      Creates a new direct decrypter.
      Parameters:
      key - The symmetric key. Its algorithm should be "AES". Must be 128 bits (16 bytes), 192 bits (24 bytes), 256 bits (32 bytes), 384 bits (48 bytes) or 512 bits (64 bytes) long. Must not be null.
      defCritHeaders - The names of the critical header parameters that are deferred to the application for processing, empty set or null if none.
      promiscuousMode - If true set the decrypter in promiscuous mode to permit decryption of any JWE with the supplied symmetric key. The that mode the JWE algorithm checks for ("alg":"dir") and encrypted key not being present will be skipped.
      Throws:
      KeyLengthException - If the symmetric key length is not compatible.
  • Method Details

    • getProcessedCriticalHeaderParams

      Description copied from interface: CriticalHeaderParamsAware
      Returns the names of the critical (crit) header parameters that are understood and processed by the JWS verifier / JWE decrypter.
      Specified by:
      getProcessedCriticalHeaderParams in interface CriticalHeaderParamsAware
      Returns:
      The names of the critical header parameters that are understood and processed, empty set if none.
    • getDeferredCriticalHeaderParams

      Description copied from interface: CriticalHeaderParamsAware
      Returns the names of the critical (crit) header parameters that are deferred to the application for processing and will be ignored by the JWS verifier / JWE decrypter.
      Specified by:
      getDeferredCriticalHeaderParams in interface CriticalHeaderParamsAware
      Returns:
      The names of the critical header parameters that are deferred to the application for processing, empty set if none.
    • decrypt

      @Deprecated public byte[] decrypt(JWEHeader header, Base64URL encryptedKey, Base64URL iv, Base64URL cipherText, Base64URL authTag) throws JOSEException
      Deprecated.
      Decrypts the specified cipher text of a JWE Object.
      Parameters:
      header - The JSON Web Encryption (JWE) header. Must specify a supported JWE algorithm and method. Must not be null.
      encryptedKey - The encrypted key, null if not required by the JWE algorithm.
      iv - The initialisation vector, null if not required by the JWE algorithm.
      cipherText - The cipher text to decrypt. Must not be null.
      authTag - The authentication tag, null if not required.
      Returns:
      The clear text.
      Throws:
      JOSEException - If the JWE algorithm or method is not supported, if a critical header parameter is not supported or marked for deferral to the application, or if decryption failed for some other reason.
    • decrypt

      public byte[] decrypt(JWEHeader header, Base64URL encryptedKey, Base64URL iv, Base64URL cipherText, Base64URL authTag, byte[] aad) throws JOSEException
      Description copied from interface: JWEDecrypter
      Decrypts the specified cipher text of a JWE Object.
      Specified by:
      decrypt in interface JWEDecrypter
      Parameters:
      header - The JSON Web Encryption (JWE) header. Must specify a supported JWE algorithm and method. Must not be null.
      encryptedKey - The encrypted key, null if not required by the JWE algorithm.
      iv - The initialisation vector, null if not required by the JWE algorithm.
      cipherText - The cipher text to decrypt. Must not be null.
      authTag - The authentication tag, null if not required.
      aad - The additional authenticated data. Must not be null.
      Returns:
      The clear text.
      Throws:
      JOSEException - If the JWE algorithm or method is not supported, if a critical header parameter is not supported or marked for deferral to the application, or if decryption failed for some other reason.