/// <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); }