public KrbFastResponse() { this.padata = null; this.strengthen_key = null; this.finished = null; this.nonce = null; }
public KrbFastResponse( Asn1SequenceOf <PA_DATA> param0, EncryptionKey param1, KrbFastFinished param2, KerbUInt32 param3) { this.padata = param0; this.strengthen_key = param1; this.finished = param2; this.nonce = param3; }
public KileTgsRequest CreateTgsRequest(string sName, KRBFlags kdcOptions, KerbUInt32 nonce, Asn1SequenceOf <PA_DATA> paData, ChecksumType checksumType, Ticket additionalTicket, AuthorizationData authorizationData) { if (sName == null) { throw new ArgumentNullException("sName"); } PrincipalName sname = new PrincipalName(new KerbInt32((int)PrincipalType.NT_SRV_INST), KileUtility.String2SeqKerbString(sName.Split('/'))); return(CreateTgsRequest(context.UserRealm, context.UserName, sname, kdcOptions, nonce, context.UserRealm, paData, checksumType, additionalTicket, authorizationData)); }
/// <summary> /// Update the context. /// </summary> /// <param name="pdu">The Pdu to update the context.</param> internal override void UpdateContext(KilePdu pdu) { if (pdu != null) { Type pduType = pdu.GetType(); if (pduType == typeof(KileAsRequest)) { KileAsRequest request = (KileAsRequest)pdu; if (request.Request != null && request.Request.req_body != null) { cName = request.Request.req_body.cname; cRealm = request.Request.req_body.realm; sName = request.Request.req_body.sname; encryptType = request.Request.req_body.etype; addresses = request.Request.req_body.addresses; nonce = request.Request.req_body.nonce; endTime = request.Request.req_body.till; rtime = request.Request.req_body.rtime; } } else if (pduType == typeof(KileAsResponse)) { KileAsResponse response = (KileAsResponse)pdu; tgsSessionKey = response.EncPart.key; } else if (pduType == typeof(KileTgsRequest)) { KileTgsRequest request = (KileTgsRequest)pdu; encryptType = request.Request.req_body.etype; nonce = request.Request.req_body.nonce; tgsTicket = request.tgtTicket; sName = request.Request.req_body.sname; if (request.authenticator != null) { tgsSubSessionKey = request.authenticator.subkey; } } else if (pduType == typeof(KileTgsResponse)) { KileTgsResponse response = (KileTgsResponse)pdu; apSessionKey = response.EncPart.key; } else if (pduType == typeof(KileApRequest)) { KileApRequest request = (KileApRequest)pdu; apRequestCtime = request.Authenticator.ctime; apRequestCusec = request.Authenticator.cusec; if (request.Authenticator.cksum != null) { int flag = BitConverter.ToInt32(request.Authenticator.cksum.checksum.ByteArrayValue, ConstValue.AUTHENTICATOR_CHECKSUM_LENGTH + sizeof(ChecksumFlags)); checksumFlag = (ChecksumFlags)flag; } apSubKey = request.Authenticator.subkey; if (request.Authenticator.seq_number != null) { currentRemoteSequenceNumber = (ulong)request.Authenticator.seq_number.Value; currentLocalSequenceNumber = currentRemoteSequenceNumber; } } else if (pduType == typeof(KileApResponse)) { KileApResponse response = (KileApResponse)pdu; if (response.ApEncPart.subkey != null) { acceptorSubKey = response.ApEncPart.subkey; } } else { // Do nothing. } } }
public KileTgsRequest CreateTgsRequest( Realm cRealm, PrincipalName cName, PrincipalName sName, KRBFlags kdcOptions, KerbUInt32 nonce, Realm realm, Asn1SequenceOf <PA_DATA> paData, ChecksumType checksumType, Ticket additionalTicket, AuthorizationData authorizationData) { if (cRealm == null) { throw new ArgumentNullException("cRealm"); } if (cName == null) { throw new ArgumentNullException("cName"); } if (sName == null) { throw new ArgumentNullException("sName"); } if (realm == null) { throw new ArgumentNullException("realm"); } KileTgsRequest request = new KileTgsRequest(context); request.Request.msg_type = new Asn1Integer((int)MsgType.KRB_TGS_REQ); request.Request.pvno = new Asn1Integer(ConstValue.KERBEROSV5); #region construct req_body request.Request.req_body = new KDC_REQ_BODY(); request.Request.req_body.kdc_options = new KDCOptions(KileUtility.ConvertInt2Flags((int)kdcOptions)); request.Request.req_body.nonce = nonce; request.Request.req_body.till = new KerberosTime(ConstValue.TGT_TILL_TIME); request.Request.req_body.etype = context.ClientEncryptionTypes; request.Request.req_body.realm = realm; if (additionalTicket != null) { request.Request.req_body.additional_tickets = new Asn1SequenceOf <Ticket>(new Ticket[] { additionalTicket }); } request.Request.req_body.sname = sName; request.EncAuthorizationData = authorizationData; if (authorizationData != null) { Asn1BerEncodingBuffer asnBuffer = new Asn1BerEncodingBuffer(); authorizationData.BerEncode(asnBuffer, true); request.Request.req_body.enc_authorization_data = new EncryptedData(); request.Request.req_body.enc_authorization_data.etype = new KerbInt32(0); byte[] encAsnEncoded = asnBuffer.Data; if (context.TgsSessionKey != null && context.TgsSessionKey.keytype != null && context.TgsSessionKey.keyvalue != null && context.TgsSessionKey.keyvalue.Value != null) { encAsnEncoded = KileUtility.Encrypt((EncryptionType)context.TgsSessionKey.keytype.Value, context.TgsSessionKey.keyvalue.ByteArrayValue, asnBuffer.Data, (int)KeyUsageNumber.TGS_REQ_KDC_REQ_BODY_AuthorizationData); request.Request.req_body.enc_authorization_data.etype = new KerbInt32(context.TgsSessionKey.keytype.Value); } request.Request.req_body.enc_authorization_data.cipher = new Asn1OctetString(encAsnEncoded); } #endregion construct req_body #region construct PA_DATA Asn1BerEncodingBuffer bodyBuffer = new Asn1BerEncodingBuffer(); request.Request.req_body.BerEncode(bodyBuffer); PA_DATA tgsPaData = ConstructTgsPaData(cRealm, cName, checksumType, bodyBuffer.Data); request.Request.padata = new Asn1SequenceOf <PA_DATA>(); if (paData == null || paData.Elements == null || paData.Elements.Length == 0) { request.Request.padata.Elements = new PA_DATA[] { tgsPaData }; } else { request.Request.padata.Elements = new PA_DATA[paData.Elements.Length + 1]; Array.Copy(paData.Elements, request.Request.padata.Elements, paData.Elements.Length); request.Request.padata.Elements[paData.Elements.Length] = tgsPaData; } #endregion construct PA_DATA return(request); }