Exemple #1
0
        private static void WritePrincipal(PrincipalName principal, NdrBuffer buffer)
        {
            buffer.WriteInt32BigEndian((int)principal.NameType);
            buffer.WriteInt32BigEndian(principal.Names.Count);

            WriteData(Encoding.UTF8.GetBytes(principal.Realm), buffer);

            foreach (var name in principal.Names)
            {
                WriteData(Encoding.UTF8.GetBytes(name), buffer);
            }
        }
Exemple #2
0
        private static void WriteAddresses(IEnumerable <KrbHostAddress> addresses, NdrBuffer buffer)
        {
            if (addresses == null)
            {
                addresses = Array.Empty <KrbHostAddress>();
            }

            buffer.WriteInt32BigEndian(addresses.Count());

            foreach (var addr in addresses)
            {
                buffer.WriteInt16BigEndian((short)addr.AddressType);
                WriteData(addr.Address, buffer);
            }
        }
Exemple #3
0
        private static void WriteAuthData(IEnumerable <KrbAuthorizationData> authData, NdrBuffer buffer)
        {
            if (authData == null)
            {
                authData = Array.Empty <KrbAuthorizationData>();
            }

            buffer.WriteInt32BigEndian(authData.Count());

            foreach (var az in authData)
            {
                buffer.WriteInt16BigEndian((short)az.Type);
                WriteData(az.Data, buffer);
            }
        }
Exemple #4
0
 private static void WriteCredential(Krb5Credential cred, NdrBuffer buffer)
 {
     WritePrincipal(cred.Client, buffer);
     WritePrincipal(cred.Server, buffer);
     WriteKeyBlock(cred.KeyBlock, buffer);
     WriteDateTimeOffset(cred.AuthTime, buffer);
     WriteDateTimeOffset(cred.StartTime, buffer);
     WriteDateTimeOffset(cred.EndTime, buffer);
     WriteDateTimeOffset(cred.RenewTill, buffer);
     buffer.WriteByte(cred.IsKey ? (byte)0x1 : (byte)0x0);
     buffer.WriteInt32BigEndian((int)cred.Flags);
     WriteAddresses(cred.Addresses, buffer);
     WriteAuthData(cred.AuthData, buffer);
     WriteData(cred.Ticket, buffer);
     WriteData(cred.SecondTicket, buffer);
 }
Exemple #5
0
 private static void WriteData(ReadOnlyMemory <byte> data, NdrBuffer buffer)
 {
     buffer.WriteInt32BigEndian(data.Length);
     buffer.WriteMemory(data);
 }
Exemple #6
0
        private static void WriteDateTimeOffset(DateTimeOffset dt, NdrBuffer buffer)
        {
            var epoch = GetEpoch(dt);

            buffer.WriteInt32BigEndian(epoch);
        }