// Copyright 1997 The Open Group Research Institute.  All rights reserved.

package krb5.lib;

import krb5.lib.ccache.*;

/**
 * Kerberos Mk Private
 */
public class KrbMkPriv {

	/**
	 * 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.SeqNumber
     * @see krb5.lib.KerberosTime
     * @see krb5.lib.HostAddress
     * @see krb5.lib.KrbException
	 */
	public KrbMkPriv(
		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_priv(
			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.SeqNumber
     * @see krb5.lib.KerberosTime
     * @see krb5.lib.HostAddress
     * @see krb5.lib.KrbException
	 */

	public KrbMkPriv(
		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_priv(
			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.SeqNumber
     * @see krb5.lib.KerberosTime
     * @see krb5.lib.HostAddress
     * @see krb5.lib.KrbException
	 */
	public KrbMkPriv(
		byte[] userData,
		EncryptionKey subKey,
		KerberosTime timestamp,
		SeqNumber seqNumber,
		HostAddress saddr,
		HostAddress raddr
	)  throws KrbException {
		obuf = ApiUtil.mk_priv(
			userData,
			subKey,
			timestamp,
			seqNumber,
			saddr,
			raddr
		);
	}

	/**
	 * Returns the message
	 *
	 * @return byte[] is a result
	 * @exception KrbException an exception
	 * @see krb5.lib.KrbException
	 */
	public byte[] msg() throws KrbException {
		return obuf;
	}
}

