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); } }
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); } }
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); } }
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); }
private static void WriteData(ReadOnlyMemory <byte> data, NdrBuffer buffer) { buffer.WriteInt32BigEndian(data.Length); buffer.WriteMemory(data); }
private static void WriteDateTimeOffset(DateTimeOffset dt, NdrBuffer buffer) { var epoch = GetEpoch(dt); buffer.WriteInt32BigEndian(epoch); }