package com.nifty.cloud.ncs.encrypt;

import java.security.KeyPair;
import java.util.HashMap;
import java.util.Map;

import javax.crypto.SecretKey;


/**
 * 暗号化に使用する鍵情報を保持するクラスです。
 */
public class EncryptionKeyMaterials
{
	private KeyPair keyPair;
	private SecretKey encryptionKey;

	/**
	 * キーペアを指定して新しいEncryptionMaterialsを構築します。
	 *
	 * @param keyPair
	 *  キーペア
	 */
	public EncryptionKeyMaterials(KeyPair keyPair)
	{
		this(keyPair, null);
	}

	/**
	 * 暗号鍵を指定して新しいEncryptionMaterialsを構築します。
	 *
	 * @param encryptionKey
	 *  暗号鍵
	 */
	public EncryptionKeyMaterials(SecretKey encryptionKey)
	{
		this(null, encryptionKey);
	}

	/**
	 * キーペア、暗号鍵を指定して新しいEncryptionMaterialsを構築します。<br>
	 * このコンストラクタは内部でのみ使用されます。
	 *
	 * @param keyPair
	 * @param encryptionKey
	 */
	private EncryptionKeyMaterials(KeyPair keyPair, SecretKey encryptionKey)
	{
		this.keyPair = keyPair;
		this.encryptionKey = encryptionKey;
	}

	/**
	 * キーペアを取得します。
	 *
	 * @return キーペア
	 */
	public KeyPair getKeyPair()
	{
		return (this.keyPair);
	}

	/**
	 * 暗号鍵を取得します。
	 *
	 * @return 暗号鍵
	 */
	public SecretKey getEncryptionKey()
	{
		return (this.encryptionKey);
	}

	/**
	 * EncryptionMaterials基本クラスは、Materialsの特別な情報を持っていないので、空のマップを返します。
	 * サブクラスはこのメソッドをオーバーライドすることができます。
	 *
	 * @return 空のマップ
	 */
	public Map<String, String> getMaterialsDescription()
	{
		return (new HashMap<String, String>());
	}

}
