/// <summary>
        /// Create KRB_PRIV. This PDU should be sent after AP exchange successfully.
        /// </summary>
        /// <param name="krbPrivRequest">Specify if sequence number or timestamp will be used.</param>
        /// <param name="userData">The user data want to send.</param>
        /// <returns>The created KRB_PRIV.</returns>
        public KrbPriv CreateKrbPrivRequest(KRB_PRIV_REQUEST krbPrivRequest, byte[] userData)
        {
            KrbPriv priv = new KrbPriv(context);

            priv.KerberosPriv.msg_type = new Asn1Integer((int)MsgType.KRB_PRIV);
            priv.KerberosPriv.pvno     = new Asn1Integer(ConstValue.KERBEROSV5);

            priv.PrivEncPart = ConstructEncKrbPrivPart(krbPrivRequest, userData);
            return(priv);
        }
        /// <summary>
        /// Construct EncKrbPrivPartof of KrbPrivRequest
        /// </summary>
        /// <param name="krbPrivRequest">to decide whether an seq_number in EncKrbPrivPart or not</param>
        /// <param name="userData">The user data want to send.</param>
        /// <returns>The EncKrbPrivPart.</returns>
        private EncKrbPrivPart ConstructEncKrbPrivPart(KRB_PRIV_REQUEST krbPrivRequest, byte[] userData)
        {
            EncKrbPrivPart encKrbPriv = new EncKrbPrivPart();

            encKrbPriv.s_address = new HostAddress(new KerbInt32((int)AddressType.NetBios),
                                                   new Asn1OctetString(Dns.GetHostName()));
            encKrbPriv.usec      = new Microseconds(0);
            encKrbPriv.user_data = new Asn1OctetString(userData);

            if (krbPrivRequest == KRB_PRIV_REQUEST.KrbPrivWithSequenceNumber)
            {
                encKrbPriv.seq_number = new KerbUInt32((long)context.CurrentLocalSequenceNumber);
                encKrbPriv.timestamp  = null;
            }
            else
            {
                encKrbPriv.seq_number = null;
                encKrbPriv.timestamp  = new KerberosTime(KileUtility.GetCurrentUTCTime());
            }

            return(encKrbPriv);
        }