// Copyright 1997 The Open Group Research Institute.  All rights reserved.

package krb5.lib;

import krb5.lib.ccache.*;

/**
 * KRB MK safe
 */
public class KrbMkSafe {

	/**
	 * Output buffer
	 */
	byte[] obuf;

	/**
	 * Class constructor
	 *
	 * @param userData is of type byte[]
	 * @param creds is of type Credentials
	 * @param subKey is of type EncryptionKey
	 * @param timestamp is of type KerberosTime
	 * @param seqNumber is of type SeqNumber
	 * @param saddr is of type HostAddress
	 * @param raddr is of type HostAddress
	 * @exception KrbException an exception
	 * @see krb5.lib.Credentials
	 * @see krb5.lib.EncryptionKey
	 * @see krb5.lib.KerberosTime
	 * @see krb5.lib.SeqNumber
	 * @see krb5.lib.HostAddress
	 * @see krb5.lib.KrbException
	 */
	public KrbMkSafe(
		byte[] userData,
		Credentials creds,
		EncryptionKey subKey,
		KerberosTime timestamp,
		SeqNumber seqNumber,
		HostAddress saddr,
		HostAddress raddr
	)  throws KrbException {
		EncryptionKey reqKey = null;
		if (subKey != null)
			reqKey = subKey;
		else
			reqKey = creds.key;

		obuf = ApiUtil.mk_safe(
			userData,
			reqKey,
			timestamp,
			seqNumber,
			saddr,
			raddr
		);
	}

	/**
	 * Class constructor
	 *
	 * @param userData is of type byte[]
	 * @param creds is of type KrbCreds
	 * @param subKey is of type EncryptionKey
	 * @param timestamp is of type KerberosTime
	 * @param seqNumber is of type SeqNumber
	 * @param saddr is of type HostAddress
	 * @param raddr is of type HostAddress
	 * @exception KrbException an exception
	 * @see krb5.lib.KrbCreds
	 * @see krb5.lib.EncryptionKey
	 * @see krb5.lib.KerberosTime
	 * @see krb5.lib.SeqNumber
	 * @see krb5.lib.HostAddress
	 * @see krb5.lib.KrbException
	 */
	public KrbMkSafe(
		byte[] userData,
		KrbCreds creds,
		EncryptionKey subKey,
		KerberosTime timestamp,
		SeqNumber seqNumber,
		HostAddress saddr,
		HostAddress raddr
	)  throws KrbException {
		EncryptionKey reqKey = null;
		if (subKey != null)
			reqKey = subKey;
		else
			reqKey = creds.key;

		obuf = ApiUtil.mk_safe(
			userData,
			reqKey,
			timestamp,
			seqNumber,
			saddr,
			raddr
		);
	}

	/**
	 * Class constructor
	 *
	 * @param userData is of type byte[]
	 * @param subKey is of type EncryptionKey
	 * @param timestamp is of type KerberosTime
	 * @param seqNumber is of type SeqNumber
	 * @param saddr is of type HostAddress
	 * @param raddr is of type HostAddress
	 * @exception KrbException an exception
	 * @see krb5.lib.EncryptionKey
	 * @see krb5.lib.KerberosTime
	 * @see krb5.lib.SeqNumber
	 * @see krb5.lib.HostAddress
	 * @see krb5.lib.KrbException
	 */
	public KrbMkSafe(
		byte[] userData,
		EncryptionKey subKey,
		KerberosTime timestamp,
		SeqNumber seqNumber,
		HostAddress saddr,
		HostAddress raddr
	)  throws KrbException {
		obuf = ApiUtil.mk_safe(
			userData,
			subKey,
			timestamp,
			seqNumber,
			saddr,
			raddr
		);
	}

	/**
	 * Returns message
	 *
	 * @return byte[] is a result
	 */
	public byte[] msg() {
		return obuf;
	}
}