package com.nifty.cloud.ncs.encrypt;

import java.util.Map;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;

/**
 * 暗号化情報を保持する内部クラスです。
 */
public class EncryptionInstruction
{
	private final Map<String, String> materialsDescription;
	private final byte[] encryptedSymmetricKey;
	private final SecretKey symmetricKey;
	private final Cipher symmetricCipher;

	/**
	 * 暗号鍵情報のdescription、暗号化された対称鍵、対称鍵、対称鍵暗号を指定して、新しいEncryptionInstructionを構築します。
	 *
	 * @param materialsDescription
	 *  暗号鍵情報のdescription
	 * @param encryptedSymmetricKey
	 *  暗号化された対称鍵
	 * @param symmetricKey
	 *  対称鍵
	 * @param symmetricCipher
	 *  対称鍵暗号
	 */
	public EncryptionInstruction(Map<String, String> materialsDescription, byte[] encryptedSymmetricKey, SecretKey symmetricKey, Cipher symmetricCipher)
	{
		this.materialsDescription = materialsDescription;
		this.encryptedSymmetricKey = encryptedSymmetricKey;
		this.symmetricKey = symmetricKey;
		this.symmetricCipher = symmetricCipher;
	}

	/**
	 * 暗号鍵情報のdescriptionを取得します。
	 *
	 * @return 暗号鍵情報のdescription
	 */
	public Map<String, String> getMaterialsDescription()
	{
		return (this.materialsDescription);
	}

	/**
	 * 暗号化された対称鍵のバイト列を取得します。
	 *
	 * @return 暗号化された対称鍵のバイト列
	 */
	public byte[] getEncryptedSymmetricKey()
	{
		return (this.encryptedSymmetricKey);
	}

	/**
	 * 対称鍵を取得します。
	 *
	 * @return 対称鍵
	 */
	public SecretKey getSymmetricKey()
	{
		return (this.symmetricKey);
	}

	/**
	 * 対称鍵暗号を取得します。
	 *
	 * @return 対称鍵暗号
	 */
	public Cipher getSymmetricCipher()
	{
		return (this.symmetricCipher);
	}
}
