Ejemplo n.º 1
0
        public static KrbCred WrapTicket(KrbTicket ticket, KrbCredInfo credInfo)
        {
            if (ticket is null)
            {
                throw new ArgumentNullException(nameof(ticket));
            }

            if (credInfo is null)
            {
                throw new ArgumentNullException(nameof(credInfo));
            }

            Now(out DateTimeOffset timestamp, out int usec);

            var encPart = new KrbEncKrbCredPart
            {
                Timestamp  = timestamp,
                USec       = usec,
                TicketInfo = new[] { credInfo }
            };

            var cred = new KrbCred
            {
                EncryptedPart = new KrbEncryptedData {
                    Cipher = encPart.EncodeApplication()
                },
                Tickets = new[] { ticket },
            };

            return(cred);
        }
Ejemplo n.º 2
0
        public static KrbCred GenerateWrappedServiceTicket(ServiceTicketRequest request)
        {
            GenerateServiceTicket <KrbTgsRep>(
                request,
                out KrbEncTicketPart encTicketPart,
                out KrbTicket ticket,
                out _,
                out _,
                out _
                );

            return(KrbCred.WrapTicket(ticket, encTicketPart));
        }
Ejemplo n.º 3
0
        public static KrbCred WrapTicket(KrbTicket ticket, KrbEncTicketPart encTicketPart)
        {
            if (ticket is null)
            {
                throw new ArgumentNullException(nameof(ticket));
            }

            if (encTicketPart is null)
            {
                throw new ArgumentNullException(nameof(encTicketPart));
            }

            KerberosConstants.Now(out DateTimeOffset timestamp, out int usec);

            var encPart = new KrbEncKrbCredPart
            {
                Timestamp  = timestamp,
                USec       = usec,
                TicketInfo = new[]
                {
                    new KrbCredInfo
                    {
                        Key       = encTicketPart.Key,
                        AuthTime  = encTicketPart.AuthTime,
                        EndTime   = encTicketPart.EndTime,
                        Flags     = encTicketPart.Flags,
                        PName     = encTicketPart.CName,
                        Realm     = encTicketPart.CRealm,
                        RenewTill = encTicketPart.RenewTill,
                        SName     = ticket.SName,
                        SRealm    = ticket.Realm,
                        StartTime = encTicketPart.StartTime,
                    }
                }
            };

            var cred = new KrbCred
            {
                EncryptedPart = new KrbEncryptedData {
                    Cipher = encPart.EncodeApplication()
                },
                Tickets = new[] { ticket },
            };

            return(cred);
        }
Ejemplo n.º 4
0
        public DelegationInfo Decode(ReadOnlyMemory <byte> value)
        {
            using (var reader = new BinaryReader(new MemoryStream(value.ToArray())))
            {
                this.Length = reader.ReadInt32();

                this.ChannelBinding = reader.ReadBytes(this.Length);

                this.Flags = (GssContextEstablishmentFlag)reader.ReadBytes(4).AsLong(littleEndian: true);

                if (reader.BytesAvailable() > 0)
                {
                    this.DelegationOption = reader.ReadInt16();
                }

                int delegationLength = 0;

                if (reader.BytesAvailable() > 0)
                {
                    delegationLength = reader.ReadInt16();
                }

                byte[] delegationTicket = null;

                if (reader.BytesAvailable() > 0)
                {
                    delegationTicket = reader.ReadBytes(delegationLength);
                }

                if (delegationTicket != null && delegationTicket.Length > 0)
                {
                    this.DelegationTicket = KrbCred.DecodeApplication(delegationTicket);
                }

                if (reader.BytesAvailable() > 0)
                {
                    this.Extensions = reader.ReadBytes((int)reader.BytesAvailable());
                }
            }

            return(this);
        }
Ejemplo n.º 5
0
        public DelegationInfo Decode(ReadOnlyMemory <byte> value)
        {
            var reader = new BinaryReader(new MemoryStream(value.ToArray()));

            Length = reader.ReadInt32();

            ChannelBinding = reader.ReadBytes(Length);

            Flags = (ChecksumFlag)BitConverter.ToInt32(reader.ReadBytes(4), 0);

            if (reader.BytesAvailable() > 0)
            {
                DelegationOption = reader.ReadInt16();
            }

            int delegationLength = 0;

            if (reader.BytesAvailable() > 0)
            {
                delegationLength = reader.ReadInt16();
            }

            byte[] delegationTicket = null;

            if (reader.BytesAvailable() > 0)
            {
                delegationTicket = reader.ReadBytes(delegationLength);
            }

            if (delegationTicket != null && delegationTicket.Length > 0)
            {
                DelegationTicket = KrbCred.DecodeApplication(delegationTicket);
            }

            if (reader.BytesAvailable() > 0)
            {
                Extensions = reader.ReadBytes((int)reader.BytesAvailable());
            }

            return(this);
        }