Пример #1
0
        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);
        }
Пример #2
0
        public void ClaimsSetTest()
        {
            try
            {
                var set = new ClaimsSet("{\"typ\":\"JWT\",      \"alg\":\"HS256\"}");

                var keys = set.ToList();

                set["awkward"] = (int)24;
                set["typ"]     = "Scooby";
                set["hmm"]     = 42;

                var json = set.ToString();

                var set2 = new ClaimsSet(json);

                Assert.AreEqual(set2["typ"], "Scooby");
                Assert.AreEqual(set2["alg"], "HS256");
                Assert.AreEqual((long)set2["awkward"], 24L);
                Assert.AreEqual((long)set2["hmm"], 42L);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Пример #3
0
        public ClaimsSetMetadata(byte[] data)
        {
            var pacStream = new NdrBinaryReader(data);

            Header = new RpcHeader(pacStream);

            ClaimSetSize = pacStream.ReadInt();

            pacStream.Seek(4);

            CompressionFormat        = (CompressionFormat)pacStream.ReadInt();
            UncompressedClaimSetSize = pacStream.ReadInt();
            ReservedType             = pacStream.ReadShort();
            ReservedFieldSize        = pacStream.ReadInt();

            pacStream.Align(8);
            var size = pacStream.ReadInt();

            if (size != ClaimSetSize)
            {
                throw new InvalidDataException($"Data length {size} doesn't match expected ClaimSetSize {ClaimSetSize}");
            }

            var claimSet = pacStream.Read(ClaimSetSize);

            if (CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                claimSet = Compressions.Decompress(claimSet, UncompressedClaimSetSize, CompressionFormat);
            }

            ClaimsSet = new ClaimsSet(claimSet);

            ReservedField = pacStream.Read(ReservedFieldSize);
        }
Пример #4
0
        private ClaimsSet UnmarshalClaimsSet(ReadOnlyMemory <byte> claimSet)
        {
            if (CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                claimSet = Compressions.Decompress(claimSet.Span, UncompressedClaimSetSize, CompressionFormat);
            }

            var claimsSet = new ClaimsSet();

            new NdrBuffer(claimSet).UnmarshalObject(claimsSet);

            return(claimsSet);
        }
Пример #5
0
        private ClaimsSet UnmarshalClaimsSet(ReadOnlyMemory <byte> claimSet)
        {
            if (this.CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                claimSet = Compressions.Decompress(claimSet.Span, this.UncompressedClaimSetSize, this.CompressionFormat);
            }

            var claimsSet = new ClaimsSet();

            using (var buffer = new NdrBuffer(claimSet))
            {
                buffer.UnmarshalObject(claimsSet);
            }

            return(claimsSet);
        }
Пример #6
0
        private static ReadOnlySpan <byte> Compress(ClaimsSet claimsSet, CompressionFormat compressionFormat, out int originalSize)
        {
            var buffer = new NdrBuffer();

            buffer.MarshalObject(claimsSet);

            ReadOnlySpan <byte> encoded = buffer.ToSpan(alignment: 8);

            originalSize = encoded.Length;

            if (compressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                encoded = Compressions.Compress(encoded, compressionFormat);
            }

            return(encoded);
        }
Пример #7
0
        private static ReadOnlySpan <byte> Compress(ClaimsSet claimsSet, CompressionFormat compressionFormat, out int originalSize)
        {
            var stream = new NdrBinaryStream();

            claimsSet.Encode(stream);

            var encoded = stream.ToSpan();

            originalSize = encoded.Length;

            if (compressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                encoded = Compressions.Compress(encoded, compressionFormat);
            }

            return(encoded);
        }