package com.eactive.eai.common.security.keyderiv;

import java.util.Map;

public interface KeyDerivationStrategy {
	
	public static final String PARAM_HSM_KEY_ALIAS = "hsmKeyAlias";
	public static final String PARAM_HSM_IV_ALIAS = "hsmIvAlias";
	public static final String PARAM_CONTEXT_KEY = "contextKey";

	
	/**
	 * 키를 도출한다.
	 *
	 * @param params         DB의 key_deriv_params (JSON 파싱된 Map)
	 * @param runtimeContext 런타임 컨텍스트 (HTTP 헤더, 거래 정보 등 호출자가 채워서 전달)
	 */
	DerivedKey deriveKey(Map<String, String> params, Map<String, String> runtimeContext) throws Exception;

	/**
	 * 캐시 키를 생성한다. 전략마다 어떤 runtimeContext 값이 키를 결정하는지 다르다.
	 *
	 * @param cryptoName     암호화모듈 이름
	 * @param params         DB의 key_deriv_params
	 * @param runtimeContext 런타임 컨텍스트
	 */
	String buildCacheKey(String cryptoName, Map<String, String> params, Map<String, String> runtimeContext);
}
