public override void ReadBody(NdrBinaryStream Stream) { ClaimSetSize = Stream.ReadInt(); Stream.Seek(4); CompressionFormat = (CompressionFormat)Stream.ReadInt(); UncompressedClaimSetSize = Stream.ReadInt(); ReservedType = Stream.ReadShort(); ReservedFieldSize = Stream.ReadInt(); Stream.Align(8); var size = Stream.ReadInt(); if (size != ClaimSetSize) { throw new InvalidDataException($"Data length {size} doesn't match expected ClaimSetSize {ClaimSetSize}"); } var claimSet = Stream.ReadSpan(ClaimSetSize); if (CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE) { claimSet = Compressions.Decompress(claimSet, UncompressedClaimSetSize, CompressionFormat); } ClaimsSet = new ClaimsSet(); ClaimsSet.Decode(claimSet.AsMemory()); ReservedField = Stream.Read(ReservedFieldSize); }
public override void ReadBody(NdrBinaryStream stream) { UpnLength = stream.ReadShort(); UpnOffset = stream.ReadShort(); DnsDomainNameLength = stream.ReadShort(); DnsDomainNameOffset = stream.ReadShort(); Flags = (UpnDomainFlags)stream.ReadInt(); stream.Align(8); Upn = Encoding.Unicode.GetString(stream.Read(UpnLength)); stream.Align(8); Domain = Encoding.Unicode.GetString(stream.Read(DnsDomainNameLength)); }
public override void WriteBody(NdrBinaryStream stream) { var upnBytes = Encoding.Unicode.GetBytes(Upn); var domainBytes = Encoding.Unicode.GetBytes(Domain); stream.WriteShort((short)upnBytes.Length); stream.WriteShort(2 + 2 + 2 + 2 + 4 + 4); // + 4 to align on 8 boundary stream.WriteShort((short)domainBytes.Length); stream.WriteShort((short)(2 + 2 + 2 + 2 + 4 + 4 + upnBytes.Length)); stream.WriteUnsignedInt((int)Flags); stream.Align(8); stream.WriteBytes(upnBytes); stream.Align(8); stream.WriteBytes(domainBytes); }