package org.jboss.resteasy.jose.jwe.crypto;

import org.jboss.resteasy.jose.i18n.Messages;



/**
 * The cryptographic parts of a JSON Web Encryption (JWE) object. This class is
 * an immutable simple wrapper for returning the cipher text, initialisation
 * vector (IV), encrypted key and authentication tag
 * implementations.
 *
 * @author Vladimir Dzhuvinov
 * @version $version$ (2012-05-05)
 */
public final class JWECryptoParts
{


   /**
    * The encrypted key (optional).
    */
   private final String encryptedKey;


   /**
    * The initialisation vector (optional).
    */
   private final String iv;


   /**
    * The cipher text.
    */
   private final String cipherText;


   /**
    * The authentication tag (optional).
    */
   private final String authenticationTag;


   /**
    * Creates a new cryptograhic JWE parts instance.
    *
    * @param encryptedKey      The encrypted key, {@code null} if not
    *                          required by the encryption algorithm.
    * @param iv                The initialisation vector (IV),
    *                          {@code null} if not required by the
    *                          encryption algorithm.
    * @param cipherText        The cipher text. Must not be {@code null}.
    * @param authenticationTag The authentication tag, {@code null} if the
    *                          JWE algorithm provides built-in integrity
    *                          check.
    */
   public JWECryptoParts(final String encryptedKey,
                         final String iv,
                         final String cipherText,
                         final String authenticationTag
   ) {

      this.encryptedKey = encryptedKey;

      this.iv = iv;

      if (cipherText == null) {

         throw new IllegalArgumentException(Messages.MESSAGES.cipherTextMustNotBeNull());
      }

      this.cipherText = cipherText;

      this.authenticationTag = authenticationTag;
   }


   /**
    * Gets the encrypted key.
    *
    * @return The encrypted key, {@code null} if not required by
    *         the JWE algorithm.
    */
   public String getEncryptedKey() {

      return encryptedKey;
   }


   /**
    * Gets the initialisation vector (IV).
    *
    * @return The initialisation vector (IV), {@code null} if not required
    *         by the JWE algorithm.
    */
   public String getInitializationVector() {

      return iv;
   }


   /**
    * Gets the cipher text.
    *
    * @return The cipher text.
    */
   public String getCipherText() {

      return cipherText;
   }


   /**
    * Gets the authentication tag.
    *
    * @return The authentication tag, {@code null} if the encryption
    *         algorithm provides built-in integrity checking.
    */
   public String getAuthenticationTag() {

      return authenticationTag;
   }

}
